1

フォームの読み込み中に再帰関数を使用しています。プログラムでコントロールにイベント ハンドラーをアタッチしています。再帰関数により、イベント ハンドラーはコントロールに複数回フックされます。これらのコントロールからすべてのハンドラーを削除したいと考えています。

例えば。テキストボックスにkeypress、keydown、gotfocusなどのイベントを追加しました。これらのハンドラをすべて削除したい。どのようにそれを達成するのですか?

4

3 に答える 3

1

loEventHandlerが以前にイベント (たとえば、クリック) をサブスクライブしたイベント ハンドラーである場合は、 を実行して削除できますloBox.Click -= loEventHandler;

イベントを null に設定することで、プライベート スコープ内でイベントをクリアすることもできますが、MyEvent = null;これはパブリック スコープでは機能しません。

于 2012-10-03T17:51:03.580 に答える
0

1 つのイベントが複数回登録されるのを避けるために、次のようなプロパティ ラッパーを追加できます。

    public event EventHandler<EventArgs> _event;
    public event EventHandler<EventArgs> PublicEvent
    {

        add
        {
            if (_event == null)
                _event += value;
        }

        remove
        {
            _event -= value;
        }
    }
于 2012-10-03T19:05:03.120 に答える
0

イベントは特別な種類のデリゲートであり、サブスクライバーが互いに干渉することを許可しないため、「外部」の世界からそれを行うことはできません。

于 2012-10-03T18:00:09.690 に答える