1

カスタム コレクション エディターがあり、プログラムでそのリスト (コレクション) にアイテムを追加して、リスト ボックスに表示できるようにしたいと考えています。どうすればそれができますか?CollectionEditor の AddItems メソッドについては知っていますが、コレクション オブジェクトをパラメーターとして受け取りますが、CollectionEditor の内部リスト オブジェクトを取得する方法がわかりません... :/

[更新]うーん..適切なメソッド名は「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]

4

2 に答える 2

0

私はあなたの質問を誤解しているかもしれませんが、最初にあなた自身のコレクションを定義する必要はありませんか?そしてそれをEditorAttributeで飾ります

[EditorAttribute(typeof(System.ComponentModel.Design.CollectionEditor)、typeof(System.Drawing.Design.UITypeEditor))]

于 2009-07-28T09:37:28.923 に答える
0

.NET Reflector とリフレクション メカニズムのおかげで解決策を見つけました。SetItems メソッドを使用する代わりに、次private void AddItems(IList instances)のよう に CollectionForm: のプライベート メソッドを呼び出しています。

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

PS。上記の残りのコードを参照してください...

于 2009-07-28T11:31:28.287 に答える