0

フォームがロードされたときに、データテーブルからいくつかのキー/値をコンボボックスに入力したいと思います。また、ユーザーがコンボボックスで選択を行うと、SelectedValueChanged イベントでいくつかのステートメントが実行されることを期待してください。

ただし、次を使用してデータを入力する場合:

    private void Form1_Load(object sender, EventArgs e)
    {
        comboBox1.DropDownStyle =  ComboBoxStyle.DropDownList;

        DataTable dt = new DataTable();
        dt.Columns.Add("id", typeof(int));
        dt.Columns.Add("name", typeof(string));

        dt.Rows.Add(1, "A1");
        dt.Rows.Add(2, "A2");
        comboBox1.DataSource = dt;
        comboBox1.DisplayMember = "name";
        comboBox1.ValueMember = "id";   
    }

次の SelectedValueChanged イベントで:

    private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
    {
        MessageBox.Show("FOO");

    }

プログラムが実行されると、ユーザーが何かを選択する前に、"foo" メッセージ ボックスが予期せず 2 回表示されます。

何が問題ですか?

どうも

4

3 に答える 3

0

ComboBoxデザイナーを介して代わりに、イベント ハンドラーの最後に入力した後、イベント ハンドラーを登録しますForm_Load

private void Form1_Load(object sender, EventArgs e)
{
    comboBox1.DropDownStyle =  ComboBoxStyle.DropDownList;

    DataTable dt = new DataTable();
    dt.Columns.Add("id", typeof(int));
    dt.Columns.Add("name", typeof(string));

    dt.Rows.Add(1, "A1");
    dt.Rows.Add(2, "A2");
    comboBox1.DataSource = dt;
    comboBox1.DisplayMember = "name";
    comboBox1.ValueMember = "id";
    comboBox1.SelectedValueChanged += comboBox1_SelectedValueChanged   
}
于 2013-06-19T16:46:56.343 に答える
0

キングキングの回答に追加..

private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
    if(init) Return;

    //codes here
}
于 2013-06-19T17:46:57.590 に答える