让孩子控制IContainer

时间:2010-02-06 23:10:13

标签: c# vb.net winforms controls containers

我创建了一个继承Panel控件的控件类。然后该控件包含另外两个面板,其中一个我想成为IContainerControl。

我知道如何将整个控件转换为IContainerControl但是无法对子控件执行相同操作。我已经尝试过C#和VB.Net,但两者都失败了。

这有意义吗?我尝试过搜索,但没有发现任何有用的东西,希望有人可以帮我上路!

谢谢!

修改

对不起,过了漫长的一天......我正在使用WinForms。

基本上我需要一个自定义用户控件,它有两个面板,一个显示一些统计信息,另一个显示控件。统计面板已完成并正常工作,但另一个面板可能包含DataGridView,ListView或TreeView(用户在设计时添加的任何一个)。

是的,我已经实现了ActiveControl和ActivateControl。

1 个答案:

答案 0 :(得分:2)

我认为你有两种策略:首先是“便宜的东西”:)

便宜的东西策略:

  1. 假设最终用户是带有源代码的程序员,项目在Visual Studio或Mono中打开,能够创建UserControls,并能够拖放他们选择的控件(例如Treeview或ListView) ,你提到“无论如何”。

    一个。创建两个UserControls

    湾UserControl1包含两个面板的空间。

    ℃。在UserControl1的一侧插入一个Panel,并将其设计为spec。

    d。在UserControl2上:允许最终用户插入他们选择的控件:TreeView等

    即构建UserControls

    F。将UserControl2的实例(从ToolBox图标)放到UserControl1上并根据需要定位它(Dock,Anchor等)。

  2. 再次建造。现在,您可以在WinForm上放置UserControl1的实例,它将包括两个面板。

    成本/收益:

    • 您可以用标准方式编辑每个控件的外观和属性

    • 最终用户可以选择在UserControl2上使用哪个Control。

    • 您在这里有更多的组件分离,可以更容易维护或扩展?

    • 谁将根据用户是否选择TreeView或ListView让Control继续使用UserControl2来进行编程?

    更昂贵的策略

    您将需要继承“ParentControlDesigner”以生成运行时放置的控件,该控件是放置在另一个容器内的容器,接受设计时拖放控件。

    幸运的是,Henry Minute在CodeProject上有一篇很好的文章C#来源:Designing Nested Controls强烈建议你阅读本文底部的Sacha Barber的评论以及Henry Minute的答案。

    另请参阅SO:Adding design-time support for a nested container in a custom/usercontrol (Winforms).

    在任何一种策略中,您都需要做一些工作来启用访问权限(您公开的属性,您向“封闭容器”引发的事件等)。