2009-07-28 14 views
1

私はカスタムコレクションエディタを持っているので、リストボックスに表示されるようにプログラムでアイテムをリスト(コレクション)に追加したい。私はそれをどのようにすることができますか?私はCollectionEditorのAddItemsメソッドについて知っていますが、Collectionオブジェクトをパラメータとして取りますが、CollectionEditorの内部リストオブジェクトを取得する方法を見つけることはできません.../プログラムによってCollectionEditorのlist/listbox/collectionに項目を追加する方法はありますか? [修正された]

[更新] 正しいメソッド名は'SetItems' [/更新]

[更新2]私は何をしようとしているの ソースコード...

public class MyCollectionEditor : CollectionEditor 
{ 
     private Type m_itemType = null; 

     public MyCollectionEditor(Type type) 
      : base(type) 
     { 
      m_itemType = type; 
     } 

     protected override CollectionForm CreateCollectionForm() 
     { 
      Button buttonLoadItem = new Button(); 
      buttonLoadItem.Text = "Load from DB"; 
      buttonLoadItem.Click += new EventHandler(ButtonLoadItem_Click); 

      m_collectionForm = base.CreateCollectionForm(); 

      TableLayoutPanel panel1 = m_collectionForm.Controls[0] as TableLayoutPanel; 
      TableLayoutPanel panel2 = panel1.Controls[1] as TableLayoutPanel; 
      panel2.Controls.Add(buttonLoadItem); 

      return m_collectionForm; 
     } 

     private void ButtonLoadItem_Click(object sender, EventArgs e) 
     { 
      if (m_itemType.Equals(typeof(MyCustomCollection))) 
      {    
       MyCustomItem item = ...load from DB... 

       //definition: SetItems(object editValue, object[] value); 
       SetItems(-> what goes here?! <- , new object[] { item }); 
      } 
     } 
} 

[/更新2]

+0

+1彼のソリューションを完全に説明するためのアップデートを投稿してください!今私はそれが私のために働くかどうか見る...;) – IAbstract

答えて

0

私が誤解することができますよあなたはあなた自身のコレクションを最初に定義しなければならないのですか?その後、私は.NETにソリューションのおかげで見つけた

+0

はい、あなたは正しいです。私は私のコレクションを持って、私はCollectionEditorクラスを派生させ、あなたが示唆したように私のコレクションを装飾しました。私が達成したいのは、CollectionEditor内です。読み込みを処理した後、このアイテムをリストに追加したい場合、DBからアイテムを追加するボタンを追加しました(オリジナルのボタンの隣に追加して削除します)。 (CollectionEditorの)アイテムを '設定'するメソッドがありますが、保護されているためアクセスできないオブジェクトの実際のリストを渡す必要があります。 – stavo

0

EditorAttribute

[EditorAttribute(typeof演算(System.ComponentModel.Design.CollectionEditor)、typeof演算(System.Drawing.Design.UITypeEditor))]でそれを飾ります反射鏡と反射機構。

MethodInfo methodInfo = m_collectionForm.GetType().GetMethod("AddItems", BindingFlags.NonPublic | BindingFlags.Instance); 
methodInfo.Invoke(m_collectionForm, new object[] { /* my items here */ }); 

PS:このように、private void AddItems(IList instances):代わりにSetItemsメソッドを使用して、私はCollectionFormのプライベートメソッドを呼び出しています。上のコードの残りを参照してください...

関連する問題