在Winforms自定义UserControl上启用设计图面

时间:2010-01-13 12:53:17

标签: c# .net winforms user-controls custom-controls

我尝试在C#中创建一个自定义用户控件来处理添加到其中的其他控件。自定义控件由两个面板组成。我想要实现的是,如果在设计模式下将另一个控件拖动到我的用户控件(或在运行时以编程方式添加),我希望将该控件放在其中一个面板上。

我试图处理OnControlAdded事件,但这没有做到这一点......

2 个答案:

答案 0 :(得分:5)

Markus写道:“如果在设计模式下将另一个控件拖动到我的用户控件(或在运行时以编程方式添加),我希望将该控件放在其中一个面板上。”

我将解释上述内容,意味着您想要将Design-Time拖动控件变为UserControl的两个内部面板之一的子控件:如果这种陈述是错误的:请忽略以下内容:)

另外,为了避免混淆:当您在设计时放置在表单上的UserControl实例中观察到面板或其他“容器”控件时,您完全没有“消耗”或“吞下” “按照您的预期拖动控件:实际上您甚至无法单独选择它们:它们被添加到UserControl的ControlCollection中。

幸运的是,在设计时拖拽的情况下,有一个很好的可靠代码示例,您可以在Henry Minute的CodeProject上学习和使用:Designing Nested Controls:该文章将向您展示如何从ParentControlDesigner继承因此,在设计时控制用户控件的子控件可以按照您要查找的方式充当容器。

如果你想在运行时(程序员)想要你的控件的消费者...假设他们没有源,那么他们与你的UserControl交互作为“黑盒子”,能够“看到”只有属性,方法,可用事件等,您已经公开...来控制添加控件的位置:您决定如何希望消费者访问面板。您可以通过UserControl的公共属性“直接”将它们公开为对象,或者您可以只公开一个Public方法来为每个面板添加控件。

答案 1 :(得分:0)

为什么不直接将它拖到面板中,或者将其中一个面板作为公共访问者并直接添加到该面板上?