5

実行時にフォームに追加しているバインドされた ComboBox (Windows フォーム) に SelectedIndex を設定する際に問題があり、何かおかしなことが起こっていると思われます。

これを試すと、「InvalidArgument='1' の値は 'SelectedIndex' には無効です」というエラーが表示されます。

private void Form1_Load(object sender, EventArgs e)
        {
            List<string> comboBoxList = new List<string>();
            comboBoxList.Add("Apples");
            comboBoxList.Add("Oranges");
            comboBoxList.Add("Pears");

            ComboBox comboBox1 = new ComboBox();
            comboBox1.DataSource = comboBoxList;
            comboBox1.SelectedIndex = 1;
            this.Controls.Add(comboBox1);
        }

ただし、次のようにアイテムを ComboBox に直接追加しても問題ありません。

comboBox1.Add("Apples");

また、次のように、SelectedIndex を設定する前にコントロールをフォームに追加しても問題ありません。

ComboBox comboBox1 = new ComboBox();
this.Controls.Add(comboBox1);
comboBox1.DataSource = comboBoxList;
comboBox1.SelectedIndex = 1;

コントロールがフォームに追加されるまで、選択したインデックスをデータソースから設定できない理由を誰かが説明できますか?

4

1 に答える 1

6

私の理解では、データバインディングは通常バインディングコンテキストによって処理されます。これは親フォームのバインディングコンテキストです。したがって、comboBox をフォームに追加するまで、データソースのバインドは行われません。また、comboBox の bindingcontext をフォーム バインディング コンテキストに設定すると、これを機能させることができます。

comboBox1.BindingContext = this.BindingContext;
comboBox1.DataSource = comboBoxList;
comboBox1.SelectedIndex = 1;
this.Controls.Add(comboBox1);

BindingContext クラス

BindingContextとは

于 2008-11-27T18:01:29.043 に答える