C# Combox SelectedIndexChanged在关闭WinForm时激发

C# Combox SelectedIndexChanged在关闭WinForm时激发,c#,C#,我使用Combobox SelectedIndexChanged事件来执行一些任务。它工作得很好。但是当我关闭表单时,SelectedIndexChanged被激发,我得到“对象引用未设置为对象的实例。”异常。我的代码如下- private void cmbProductName_SelectedIndexChanged(object sender, EventArgs e) { try { Product p =(Prod

我使用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.

尝试在FormClosing事件处理程序中注销事件:


MyComboBox.SelectedIndexChanged-=combox\u SelectedIndexChanged

在“从关闭”过程中,可以删除组合框事件处理程序。因此,您需要关闭表单的事件处理程序,并且必须在那里删除
cmbProductName\u SelectedIndexChanged
回调


在这里,您可以阅读和。

如果您只想在用户更改组合框中的选定项时执行任务,最好实现该事件

[编辑]

根据MSDN文档
SelectionChangeCommitted
仅当
组合框
选择由用户更改(通过键盘或鼠标)时才会发生,并且当选择以编程方式更改时不会引发

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

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

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

private void cmbProductName_SelectionChangeCommitted(object sender, EventArgs e)
{
    /*
      Your event handling code
    */
}

在表单关闭事件中,您的设置是否与cmbProductName相关?或者焦点可能会出现在Combo中。触发Combobox SelectedIndexChanged在关闭时不是正常行为,请确保在关闭时不调用它closing@Akerm-我哪儿也不叫它,这是个好主意。但我从未使用过这个事件。我必须研究它。但如果你能举个小例子,我将不胜感激。谢谢哈利法。我怎样才能让你满意?十分之十??哈哈。我要更改我的代码。再次感谢。SelectionChangeCommitted会造成问题。