3

我正在使用 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 事件?

谢谢SK保罗。

4

3 回答 3

5

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

MyComboBox.SelectedIndexChanged -= combox_SelectedIndexChanged;

于 2012-11-06T11:14:16.580 回答
5

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

[编辑]

According to MSDN docs SelectionChangeCommittedoccurs only when the ComboBoxselection changes by user (via keyboard or mouse) and it is not raised when the selection changes programmatically.

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

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

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

private void cmbProductName_SelectionChangeCommitted(object sender, EventArgs e)
{
    /*
      Your event handling code
    */
}
于 2012-11-06T11:17:10.093 回答
2

在关闭期间,您可以删除 ComboBox 事件处理程序。因此,您需要Closing表单的事件处理程序,并且您必须删除cmbProductName_SelectedIndexChanged回调。

在这里您可以阅读有关Form.Closing以及如何删除事件处理程序的信息。

于 2012-11-06T11:14:37.047 回答