我有一个UserControl
,可以在设计时期间动态创建自己的控件。我正在尝试启用这些控件的编辑。到目前为止,我已经给我的UserControl
这个属性:[Designer(typeof(OuterControlDesigner))]
使其使用此设计器代码:
public class OuterControlDesigner : ControlDesigner
{
public override void Initialize(IComponent component)
{
base.Initialize(component);
}
public void AddControl(Control ctrl, string name)
{
this.EnableDesignMode(ctrl, name); //<--ERROR HERE
}
}
当我动态添加控件时,我运行AddControl
。效果很好,我可以选择动态创建的控件并查看其属性。
当我需要重新生成动态控件时,问题就来了。运行AddControl
(第二次)时,出现此错误:
System.ArgumentException: 'Duplicate component name 'cbb1'. Component names must be unique and case-insensitive.'
这很有道理,但是,我不知道该如何解决。如果我不在新的控件实例上运行此代码,则无法在设计器中选择它。
FWIW,我要通过从this.Controls.Clear()
调用UserControl
来删除控件。我是否需要通知设计者有关控件的删除?我该怎么做?