【发布时间】:2013-03-07 21:09:02
【问题描述】:
为了让它尽可能简单: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,并且我没有得到 MessageBox.Show("Event failed")。但是,当用户从列表中选择某个项目时,会触发该事件。此外,还有另一个按钮可以清除 list1,从而清除 CB1.Items。按下此按钮时,事件也会触发(SelectedIndex 从 X 变为 -1)。
我尝试使用其他事件,例如 SelectedValueChanged、TextChanged、SelectionChangeCommitted,但没有成功。
虽然这个问题有一个简单的暴力解决方法,但我仍然不明白为什么会出现这个问题,因此无法预测类似的情况。这就是为什么如果有人向我解释为什么在我描述的情况下没有触发任何事件,我将不胜感激。
【问题讨论】:
-
你可以用你自己的事件参数自己调用它。
-
您是否实际分配过事件?
CB1.SelectedIndexChanged += new EventHandler(CB1_SelectedIndexChanged) -
@Joel:我犯了那个错误,我已经摸不着头脑了几分钟。
-
事件处理程序通常不是
protected吗?而且我认为您应该使用更具体的EventArgs。 -
@Yuck 事件处理程序通常是私有的,至少 Visual Studio 创建私有方法。 SelectedIndexChanged 事件也使用 EventArgs。
标签: c# winforms events combobox