【发布时间】:2013-04-18 14:07:43
【问题描述】:
我想编写一个只能有Form(或派生类)类型的父级的控件。
我猜你可能会将这种行为比作 TabControl 或 TabPage,其中 TabControl 不能有非 TabPage 类型的子代,TabPage 不能有非TabControl.
但是我的实现略有不同,因为与TabControl 不同,我希望我的Form 接受任何类型的控件,但我的控件应该只有Form 类型的父级。
这是我尝试过的:
public class CustomControl : ContainerControl
{
protected override void OnParentChanged(EventArgs e)
{
base.OnParentChanged(e);
if (!(this.Parent is Form))
{
this.Parent.Controls.Remove(this);
throw new ArgumentException("CustomControl can only be a child of Form");
}
}
}
这会在表单设计器中造成一些不良影响,例如:
- 尝试在设计器中加载表单时引发异常。
- 从表单中删除控件时引发异常。
- 控件未正确调整大小。
如果有任何关于如何解决此问题的建议,或者指出我哪里出错了,我将不胜感激。
【问题讨论】:
-
您从实施此限制中获得了什么价值?
-
@RyanGates,控件改变了窗体的行为,不适用于不是窗体的控件。此外,行为改变不应该在表单级别实现,它应该是一个单独的控件。