1

コンポーネント MyComp を作成し、その中に UITypeEditor を通じて管理される SlaveComps というプロパティを定義しました。

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 ファイルに、作成された新しいインスタンスが表示されますが、デザイナーが.AddSlaveComp に追加するコマンドを生成できないことです。そのため、デザイナー ファイルには:MyComp c1 = new MyComp(); MyComp c2 = new MyComp();がありますが、それぞれの指示:mainComp.SlaveModules.Add(c1); mainComp.SlaveModules.Add(c2);はまだありません。何か案が?

[編集] 解決策が見つかりました。DesignerSerializationVisibility.Contentの代わりに使用DesignerSerializationVisibility.Hidden

4

0 に答える 0