5

我有一个相对简单的设置。我有一个自定义用户控件,上面有一堆组件、一些文本框和一个列表视图。

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

我如何明确地说“不允许将其他控件添加到此用户控件?”

再生产

4

2 回答 2

3

这不是它的工作方式。当您将用户控件放在表单上时,不支持向其添加控件。这需要一个特殊的设计师,这个答案显示了需要什么。也许看起来控件已添加,但它们仅与您的用户控件重叠。他们的父母仍然是形式。

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

于 2012-08-13T15:52:47.853 回答
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();
    }
}

再想一想,这不会在设计时抛弃你的设计师......没关系。

于 2012-08-13T15:31:32.137 回答