我想编写一个只能有父类型Form
(或派生类)的控件。
我猜您可能会将这种行为比作TabControl
, or TabPage
,其中 aTabControl
不能有非类型的子级TabPage
,TabPage
也不能有非 a 的父级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");
}
}
}
这会在表单设计器中导致一些不良影响,例如:
- 尝试在设计器中加载表单时引发异常。
- 从窗体中删除控件时引发异常。
- 控件未正确调整大小。
我将不胜感激有关如何解决此问题的任何建议,或者指出我哪里出错了。