关闭WinForm时会激活Combox SelectedIndexChanged

时间:2012-11-06 11:04:59

标签: c#

我正在使用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。

3 个答案:

答案 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.Closinghow to remove event handler