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

时间:2016-10-07 20:17:42

标签: c# .net winforms windows-forms-designer designer

我有一个控件,在该控件中有一组其他控件(有点像制表符控件 - 但不是制表符控件)。

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

我希望能够从表单视图中以设计模式向子控件添加控件。目前,如果我选择子控件并按下复选框,则复选框将添加到父控件而不是子控件,然后位于所有子控件的顶部。

如何将已经放在子控件上的控件实际添加到子控件中而不是它在设计模式下的父控件?它是一个需要添加东西的属性吗?我是否必须在其中添加一些自定义代码来捕获正在添加的控件?

1 个答案:

答案 0 :(得分:1)

首先启用内部控件设计器的行为类似于父控件:

[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");
    }
}

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

function updateObjKey(obj, currentKey, newKey) {
    var keyValue = obj[currentKey];
    obj = _.omit(obj, [currentKey]);
    obj[newKey] = keyValue;
    return obj;
  }