0

できるだけ単純にするために: ComboBox1 は (Form1 ロード イベント ハンドラーで) 空のリストにバインドされ、ComboBox1 に関連付けられたイベント ハンドラーがあります。

private void CB1_SelectedIndexChanged(object sender, EventArgs e)
{
    MessageBox.Show("Event fired");
}

private void Form1_Load(object sender, EventArgs e)
{
     CB1.DataSource = list1;
     CB1.ValueMember = "Name";
     CB1.DisplayMember = "Name";
}

フォームが読み込まれます。CB1.SelectedIndex = -1、CB1.Text = ""、CB1.Items.Count = 0

Button1 をクリックすると、list1 が入力されます。現在の状況は次のとおりです: CB1.SelectedIndex = 0、CB1.Text = "テキスト"、CB1.Items.Count =196

しかし、SelectedIndex が -1 から 0 に変更されたにもかかわらず、イベントは発生しませんでした。ただし、ユーザーがリストからアイテムを選択すると、イベントが発生します。また、list1 をクリアする別のボタンがあり、その結果 CB1.Items もクリアされます。このボタンが押されると、イベントも発生します (SelectedIndex が X から -1 に変わります)。

SelectedValueChanged、TextChanged、SelectionChangeCommitted などの他のイベントを使用しようとしましたが、成功しませんでした。

この問題には単純な力ずくの回避策がありますが、そもそもなぜこの問題が発生するのかはまだ理解できていないため、同様の状況を予測することはできません。そのため、私が説明した状況でイベントが発生しない理由を誰かが説明してくれたらありがたいです。

4

2 に答える 2

1

私のコメントは十分に注目されたので、これを潜在的な答えとして置くのが適切であるように思われました。デリゲートを介して、またはコンボボックス自体のプロパティを使用してデザイナでイベントをメソッドに実際に割り当てたことを確認する必要があります。

// Somewhere in the form load or init events
CB1.SelectedIndexChanged += new EventHandler(CB1_SelectedIndexChanged);
于 2013-03-07T21:44:55.690 に答える
0
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.button1.Click += new System.EventHandler(this.comboBox1_SelectionChangeCommitted);
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        List<string> list = new List<string> { "a", "b", "c" };
        comboBox1.DataSource = list;
        comboBox1.SelectedIndex = 0;
    }
    private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
    {
        MessageBox.Show(comboBox1.SelectedValue.ToString());
    }
    private void button1_Click(object sender, EventArgs e)
    {
        comboBox1.SelectedIndex = 1;

    }
}
于 2013-03-07T21:52:17.943 に答える