我创建了一个继承Panel控件的控件类。然后该控件包含另外两个面板,其中一个我想成为IContainerControl。
我知道如何将整个控件转换为IContainerControl但是无法对子控件执行相同操作。我已经尝试过C#和VB.Net,但两者都失败了。
这有意义吗?我尝试过搜索,但没有发现任何有用的东西,希望有人可以帮我上路!
谢谢!
修改的
对不起,过了漫长的一天......我正在使用WinForms。
基本上我需要一个自定义用户控件,它有两个面板,一个显示一些统计信息,另一个显示控件。统计面板已完成并正常工作,但另一个面板可能包含DataGridView,ListView或TreeView(用户在设计时添加的任何一个)。
是的,我已经实现了ActiveControl和ActivateControl。
答案 0 :(得分:2)
我认为你有两种策略:首先是“便宜的东西”:)
便宜的东西策略:
假设最终用户是带有源代码的程序员,项目在Visual Studio或Mono中打开,能够创建UserControls,并能够拖放他们选择的控件(例如Treeview或ListView) ,你提到“无论如何”。
一个。创建两个UserControls
湾UserControl1包含两个面板的空间。
℃。在UserControl1的一侧插入一个Panel,并将其设计为spec。
d。在UserControl2上:允许最终用户插入他们选择的控件:TreeView等
即构建UserControls
F。将UserControl2的实例(从ToolBox图标)放到UserControl1上并根据需要定位它(Dock,Anchor等)。
再次建造。现在,您可以在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).
在任何一种策略中,您都需要做一些工作来启用访问权限(您公开的属性,您向“封闭容器”引发的事件等)。