C# 使子控件成为IContainer

C# 使子控件成为IContainer,c#,vb.net,winforms,controls,containers,C#,Vb.net,Winforms,Controls,Containers,我创建了一个继承面板控件的控件类。这个控件然后包含另外两个面板,其中一个我想成为IContainerControl 我知道如何将整个控件转换为IContainerControl,但无法对子控件执行相同的操作。我试过C#和VB.Net,但都失败了 这有意义吗?我试着搜索,但没有找到任何有用的东西,希望这里有人能帮我找到路 谢谢 编辑 对不起,这是漫长的一天。。。我正在使用WinForms 基本上,我需要一个自定义usercontrol,它有两个面板,一个显示一些统计信息,另一个包含控件。stats

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

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

这有意义吗?我试着搜索,但没有找到任何有用的东西,希望这里有人能帮我找到路

谢谢

编辑

对不起,这是漫长的一天。。。我正在使用WinForms

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


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

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

便宜货策略:

  • 假设最终用户是具有源代码的程序员,项目在Visual Studio或Mono中打开,能够创建用户控件,并且能够将他们选择的控件(如您提到的Treeview或ListView)拖放到“任意”上

    a。创建两个用户控件

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

    c。在UserControl1的一侧插入一个面板,并根据规范进行设计

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

    e。构建两个用户控件

    f。将UserControl2的一个实例(从工具箱图标)放到UserControl1上,并根据需要定位它(停靠、锚定等)

  • 重新建造。现在您可以在WinForm上放置UserControl1的实例,它将包括两个面板

    成本/收益:

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

    • 最终用户可以选择在UserControl2上使用哪个控件

    • 这里的组件分离程度更高,从而更易于维护或扩展

    • 谁将根据用户是选择TreeView还是ListView为控件进行UserControl2编程

    更昂贵的策略

    您需要进入从“ParentControlDesigner”继承的过程,以使运行时放置的控件(该控件是放置在另一个容器中的容器)接受控件的设计时拖放

    幸运的是,Henry Minute有一篇关于C#source的CodeProject的好文章:强烈建议您阅读本文底部Sacha Barber的评论和Henry Minute的答案

    另外,请看下面的内容:


    在这两种策略中,您都需要做一些工作来启用访问(您公开了哪些属性,您对封闭容器引发了哪些事件,等等)。

    除了上面Ian Ringrose提出的问题之外:我想您最好告诉我们您在这里想要实现什么:您希望在设计时能够做什么;您希望在运行时执行什么行为?对于(我猜)继承自IContainerControl接口的面板:您是否实现了:“IContainerControl.ActiveControl”和“System.Windows.Forms.IContainerControl.ActivateControl(System.Windows.Forms.Control)”?编辑了问题,希望对您有所帮助。谢谢!在你提供的两个链接之间,我想我能找到一些东西。