当我以编程方式填充ComboBox时,没有事件触发

本文关键字:事件 ComboBox 编程 方式 填充 | 更新日期: 2023-09-27 18:02:55

为了使其尽可能简单: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。selecteindex = -1, CB1。Text = ", CB1.Items。Count = 0

当我单击Button1时,将填充list1。现在的情况是:CB1。selecteindex = 0, CB1。Text = "Some Text", CB1.Items。数= 196

但是,事件没有触发,尽管SelectedIndex从-1变为0,并且我没有得到MessageBox。显示("事件触发")。但是,当用户从列表中选择某些项时,将触发该事件。另外,还有一个按钮用于清除list1和CB1.Items。当按下此按钮时,事件也会触发(SelectedIndex从X变为-1)。

我已经尝试使用其他事件,如SelectedValueChanged, TextChanged, selectionchangecomcommitted,没有成功。

虽然这个问题有一个简单的蛮力解决方案,但我仍然不明白为什么这个问题首先出现,因此无法预测类似的情况。这就是为什么如果有人向我解释为什么在我描述的情况下没有事件触发,我会很感激。

当我以编程方式填充ComboBox时,没有事件触发

我的评论得到了足够的关注,所以我应该把它作为一个潜在的答案。您应该确保您已经通过委托或在设计器中使用组合框本身的属性将事件分配给方法。

// Somewhere in the form load or init events
CB1.SelectedIndexChanged += new EventHandler(CB1_SelectedIndexChanged);
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;
    }
}