在使用.net的Windows窗体中将控件's父控件约束为特定类型
本文关键字:控件 约束 类型 net Windows 窗体 | 更新日期: 2023-09-27 18:09:46
我想写一个控件,它只能有一个类型为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");
}
}
}
这会在表单设计器中产生一些不希望看到的效果,例如:
- 尝试在设计器中加载表单时抛出异常。
- 从窗体中删除控件时抛出异常。
- 控件没有正确调整大小。
我很感激任何关于如何解决这个问题的建议,或者我在哪里出错了。
正如人们常说的,最简单的答案往往是最好的……向if
语句添加一个额外的检查可以修复一切!-我真傻!我应该早点试的!
public class CustomControl : ContainerControl
{
protected override void OnParentChanged(EventArgs e)
{
base.OnParentChanged(e);
if (this.Parent != null && !(this.Parent is Form))
{
this.Parent.Controls.Remove(this);
throw new ArgumentException("CustomControl can only be a child of Form");
}
}
}