关闭WinForm时会激活Combox SelectedIndexChanged

s.k*_*aul 3 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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

如何避免在窗体关闭时触发SelectedIndexChanged事件?

谢谢SKPaul.

Lai*_*ila 5

尝试在FormClosing事件处理程序中取消注册该事件:

MyComboBox.SelectedIndexChanged - = combox_SelectedIndexChanged;


soh*_*ifa 5

如果只在用户更改组合框中的选定项目时才执行任务,则最好实施SelectionChangeCommitted事件

[编辑]

根据MSDN SelectionChangeCommitted,仅当ComboBox用户更改选择(通过键盘或鼠标)时,文档才会出现,而当选择以编程方式更改时,文档不会出现。

当列表中的值更改时,将SelectionChangeCommitted首先SelectedIndexChanged触发事件,然后触发事件。

因此,如果需要在上执行任何操作SelectedIndexChanged,则可以将其删除并在SelectionChangeCommitted事件处理程序中执行相同的工作。

只需处理此事件即可,而不是SelectedIndexChanged如下所示:

private void cmbProductName_SelectionChangeCommitted(object sender, EventArgs e)
{
    /*
      Your event handling code
    */
}
Run Code Online (Sandbox Code Playgroud)