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イベントが発生しないようにするにはどうすればよいですか?

SKPaulに感謝します。

4

3 に答える 3

5

FormClosingイベントハンドラーでイベントの登録を解除してみてください。

MyComboBox.SelectedIndexChanged-= combox_SelectedIndexChanged;

于 2012-11-06T11:14:16.580 に答える
5

ユーザーがコンボボックスで選択した項目を変更したときにのみタスクを実行する場合は、SelectionChangeCommittedイベントを実装することをお勧めします

[編集]

MSDNによると、ドキュメントは、ユーザーが(キーボードまたはマウスを介して)選択を変更しSelectionChangeCommittedた場合にのみ発生し、プログラムでComboBox選択が変更された場合は発生しません。

リスト内の値が変更されると、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 に答える