Winforms Designer:如何禁止我的usercontrol成为容器?

时间:2012-08-13 15:13:48

标签: c# winforms drag-and-drop containers windows-forms-designer

我有一个相对简单的设置。我有一个自定义的usercontrol,上面有一堆组件,一些文本框和一个listview。

在设计器中,我可以将其他控件拖放到我的usercontrol中,然后将它们添加到usercontrol实例中。我不想要这个。

如何明确说“不允许在此用户控件中添加其他控件?”

Reproduction

2 个答案:

答案 0 :(得分:3)

这不是它的工作方式。在表单上删除用户控件时,不支持向其添加控件。这需要一个特殊的设计师,this answer显示需要什么。也许看起来就像添加了控件一样,但它们只是重叠你的用户控件。他们的父母仍然是这种形式。

如果程序员在设计器中打开您的用户控件类,那么,当然,他可以随意添加控件。阻止这种情况的唯一方法是不发布源代码并使用密封的关键字来阻止它的派生。

答案 1 :(得分:0)

你可以创建一个布尔属性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();
    }
}

第二个想法,这不会在设计时抛弃你的设计师......没关系。

相关问题