用户控件包含子控件,设计模式编辑子控件

本文关键字:控件 编辑 设计模式 用户 包含 | 更新日期: 2023-09-27 18:12:09

我有一个控件,在这个控件中有其他控件的集合(有点像制表符控件-但不是制表符控件)。

所以我对表单进行了控制。我可以使用自定义集合设计器表单添加新的子控件,没有问题。

我希望能够从表单视图在设计模式下向子控件添加控件。目前,如果我选择子控件并拖放一个复选框,那么复选框会被添加到父控件而不是子控件中,然后位于所有子控件的顶部。

在设计模式下,如何使放置在子控件上的控件实际上被添加到子控件而不是它的父控件?它是一个需要添加到某些内容中的属性吗?我是否必须在那里添加一些自定义代码来捕获正在添加的控件?

用户控件包含子控件,设计模式编辑子控件

首先使内部控件设计器像父控件一样工作:

[Designer(typeof(ParentControlDesigner))]
public partial class InnerControl : UserControl

然后通过为外部控件创建一个新的控件设计器来启用内部控件在外部控件中托管时的设计模式:

[Designer(typeof(OuterControlDesigner))]
public partial class OuterControl : UserControl
{
    public OuterControl()
    {
        InitializeComponent();
    }
    public InnerControl InnerControl { get { return innerControl1; } }
}
public class OuterControlDesigner:ControlDesigner
{
    public override void Initialize(IComponent component)
    {
        base.Initialize(component);
        this.EnableDesignMode(((OuterControl)this.Control).InnerControl, "InnerControl");
    }
}