代码之家  ›  专栏  ›  技术社区  ›  peterchen

WinForms设计器:添加控件并使其对设计器可见

  •  1
  • peterchen  · 技术社区  · 14 年前

    我有一个WinForms用户控件 Host 使用自定义UI编辑器。 通过那个编辑器,一个子控件( Child )可以添加到 宿主 .

    (用户界面编辑器创建 孩子 和集合 Child.Parent = Host )

    孩子是通过 Holder<Child> helper类,设置为 Tag 属性,例如ListViewItem。

    相应的代码(至少其中一些)被添加到表单中:holder被创建,并设置为tag,这也足够在运行时创建。

    但是,子级对设计器不可见-它将显示,但无法选择,也不会出现在带有父窗体控件的下拉列表中。

    我想:

    • 孩子 控件,以便修改属性
    • 如果移除控件,则会收到通知

    这有可能吗?


    [编辑] 谢谢大家的意见。我已经决定跳过设计师——我希望能很快地把一些东西拼凑起来,但显然这需要更多的计划,而不是我现在应该花在上面的。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Jojo Sardez    14 年前

    使用 this.Controls.Add(/*Instance of the child*/); 在宿主类上。然后对于通知,为主机的controlRemoved事件添加事件处理程序( this.ControlRemoved += new ControlEventHandler(Host_ControlRemoved); )

        2
  •  1
  •   BillW    14 年前

    我不能说我完全理解你想做什么。

    如果您正在处理这样一个问题:如何使在设计时放置在窗体上的用户控件的“子”控件作为一个容器工作,您可以将其他控件从工具箱中拖放到该容器上:Henry Minute的这篇代码项目文章可能会有所帮助: Designing Nested Controls . 例如:您有一个用户控件,其中有一个面板:一个用户控件的实例放在一个窗体上:在窗体的设计时视图中:您希望能够将放置控件拖到用户控件的面板上,并使它们成为面板的子控件:亨利的文章将向您展示如何执行此操作。

    来自Microsoft的: How to make a UserControl object acts as a control container design-time by using Visual C#

    也许也有用,尽管看起来你已经完成了这个步骤。