我有一个相对简单的设置。我有一个自定义用户控件,上面有一堆组件、一些文本框和一个列表视图。
在设计器中,我可以将其他控件拖放到我的用户控件中,并将它们添加到用户控件实例中。我不想要这个。
我如何明确地说“不允许将其他控件添加到此用户控件?”
我有一个相对简单的设置。我有一个自定义用户控件,上面有一堆组件、一些文本框和一个列表视图。
在设计器中,我可以将其他控件拖放到我的用户控件中,并将它们添加到用户控件实例中。我不想要这个。
我如何明确地说“不允许将其他控件添加到此用户控件?”
这不是它的工作方式。当您将用户控件放在表单上时,不支持向其添加控件。这需要一个特殊的设计师,这个答案显示了需要什么。也许看起来控件已添加,但它们仅与您的用户控件重叠。他们的父母仍然是形式。
如果程序员自己在设计器中打开您的用户控件类,那么当然,他可以随心所欲地添加控件。阻止这种情况的唯一方法是不发布源代码并使用sealed关键字来防止从中派生。
您可以创建一个布尔属性MyContainer.DisableAddControls
或其他东西。
如果你MyContainer.Controls.Add(..)
的被覆盖,那么你可以在该方法中抛出一些自定义异常,Add()
如下所示:
if(DisableAddControls)
{
throw new DisableAddControlsException();
}
如果您直接从 继承该方法ContainerControl
,那么您可以处理该ControlAdded
事件并在那里引发异常。
myContainer.ControlAdded += myContainerControlAdded;
private void Control_Added(object sender, System.Windows.Forms.ControlEventArgs e)
{
if(DisableAddControls)
{
throw new DisableAddControlsException();
}
}
再想一想,这不会在设计时抛弃你的设计师......没关系。