2012-04-27 3 views
1

条件付きでイベントハンドラをアンフックしたい。これは適切な方法ですか:プログラムでイベントハンドラをアンフックする

tb.TextChanged -= textBoxIntName_TextChanged; 

これは必要なことをフックとして、賢明のようです:

tb.TextChanged += textBoxIntName_TextChanged; 

...しかし、それはまた、何が同じくらいか、それ以上の意味になります(ただし、残念ながら、それは「Delphiの道」に該当すると思われます

+0

' - ='はあなたのために働くはずです。 – dwerner

答えて

5

イベントを割り当てることはできません。クライアントにはアタッチ(+ =)および削除( - =)操作しか使用できません。

イベントの詳細については、hereをご覧ください。

また

C#の仕様says

ので+ =と - =イベントを宣言型外部イベント に許可されている操作のみであり、外部コードを追加することができ、 のハンドラを削除します他の方法で取得することはできませんまたは イベントハンドラの基になるリストを変更します。

+0

私の視点からは、私のイベントの割り当てが働いているので(+ =を使って)、ここでセマンティクスを話す必要があります。 –

+0

@ClayShannon nopeでは、実際には別のイベントハンドラをイベントハンドラのリストに追加します(このリストはTextBoxに格納されています)。 .NetのイベントはObserverパターンのようなものです。 Subject(TextBox)はオブザーバ(イベントハンドラ)のコレクションを保持し、イベントが発生したときに通知します。オブザーバーはコレクションに追加するか、コレクションから削除することしかできません。しかし、あなたはコレクションにアクセスすることができません。その内部はSubjectです。 –

+0

Observerパターン、つまりパブリッシュとサブスクライブがここにあることはわかっていますが、+ =を使用すると、私が期待していること/やりたいことがやはり実行されます。それが文字通りassigendされていない場合、それはまるでように動作するため、私は本当に気にしません。 –

関連する問題