コンポーネント 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 ファイルに、作成された新しいインスタンスが表示されますが、デザイナーが.Add
SlaveComp に追加するコマンドを生成できないことです。そのため、デザイナー ファイルには:MyComp c1 = new MyComp(); MyComp c2 = new MyComp();
がありますが、それぞれの指示:mainComp.SlaveModules.Add(c1); mainComp.SlaveModules.Add(c2);
はまだありません。何か案が?
[編集] 解決策が見つかりました。DesignerSerializationVisibility.Content
の代わりに使用DesignerSerializationVisibility.Hidden