通过带有UITypeEditor的List添加实例

时间:2013-03-16 15:17:46

标签: c# list designer uitypeeditor

我创建了Component MyComp,我在其中定义了一个名为SlaveComps的属性,通过UITypeEditor进行管理。

public class MyComp : Component
{   
    public MyComp()
    {
        InitializeComponent();
    }
    public MyComp(IContainer container)
    {
        container.Add(this);
        InitializeComponent();
    }
    [Editor(Global.cSlaveCompsSelectorEditor, typeof(UITypeEditor))]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public List<MyComp> SlaveComps { get; set; }
}

public class SlaveCompsSelectorEditor : UITypeEditor
{
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }        
    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        MyComp myComp = context.Instance as MyComp;
        if (myComp.SlaveModules==null)
            myComp.SlaveModules = new List<MyComp>();
        MyComp c1 = new MyComp();            
        myComp.Container.Add(c1);
        MyComp c2 = new MyComp();            
        myComp.Container.Add(c2);
        myComp.SlaveComps.Add(c1);
        myComp.SlaveComps.Add(c2);
        return myComp.SlaveModules;
    }
}

我需要做的是创建MyComp实例的集合并将它们添加到SlaveComps属性中。 问题是在主MyComp所在的.designer.cs文件中,出现了创建的新实例,但设计者无法生成.Add命令来添加SlaveComps。 因此,在设计器文件中有:MyComp c1 = new MyComp(); MyComp c2 = new MyComp();但相应的说明:mainComp.SlaveModules.Add(c1); mainComp.SlaveModules.Add(c2);仍然缺失。 有什么想法吗?

[编辑] 找到解决方案使用DesignerSerializationVisibility.Content代替DesignerSerializationVisibility.Hidden

0 个答案:

没有答案