我正在使用Combobox SelectedIndexChanged事件来执行一些任务。它工作得很好。但是当我关闭表单时,SelectedIndexChanged被触发,我得到“对象引用未设置为对象的实例”。例外。我的代码如下 -
private void cmbProductName_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
Product p =(Product) cmbProductName.SelectedItem;
RawItems = RawItem.GetEntityList(p.Id, ConnectionString);
}
catch (Exception ex)
{
CustomMessageBox.ShowSystemException(ex);
}
}
如何避免在窗体关闭时触发SelectedIndexChanged事件?
由于 SKPaul。
答案 0 :(得分:5)
尝试在FormClosing事件处理程序中取消注册事件:
MyComboBox.SelectedIndexChanged - = combox_SelectedIndexChanged;
答案 1 :(得分:3)
如果您只想在用户更改组合框中的选定项目时执行任务,最好实施SelectionChangeCommitted
事件
<强> [编辑] 强>
根据MSDN文档SelectionChangeCommitted
仅在用户(通过键盘或鼠标)更改ComboBox
选项时发生,并且当选择以编程方式更改时不会引发该文档。
在列表中更改值后,首先触发SelectionChangeCommitted
事件,然后触发SelectedIndexChanged
事件。
因此,如果我们需要对SelectedIndexChanged
执行任何操作,我们可以删除它并在SelectionChangeCommitted
事件处理程序中执行相同的操作。
只需处理此事件,而不是SelectedIndexChanged
,如下所示:
private void cmbProductName_SelectionChangeCommitted(object sender, EventArgs e)
{
/*
Your event handling code
*/
}
答案 2 :(得分:2)
在关闭期间,您可以删除ComboBox事件处理程序。因此,您的表单需要Closing
事件处理程序,并且您必须删除cmbProductName_SelectedIndexChanged
回调。
在这里,您可以阅读Form.Closing和how to remove event handler。