できるだけ単純にするために: 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 などの他のイベントを使用しようとしましたが、成功しませんでした。
この問題には単純な力ずくの回避策がありますが、そもそもなぜこの問題が発生するのかはまだ理解できていないため、同様の状況を予測することはできません。そのため、私が説明した状況でイベントが発生しない理由を誰かが説明してくれたらありがたいです。