状況はこれと同じです。私はコントロールを持っていて、イベントを持っています。このイベントはコントロールの定義にレンダリングされています。何らかのメッセージが表示されるこのコントロールを使用する別のハンドラがこのイベントにアタッチされています 最高のお礼、 Iordan再度イベントを添付しないでください
答えて
これは良いアプローチとして私を攻撃しません。イベントを使用する場合、コントロールは通常、アタッチされたイベントハンドラの数に依存しない必要があります。 0または27のイベントハンドラがイベントに反応しているかどうかに関係なく動作するはずです。より多くのコントロールを持つメカニズムを使用する場合は、代わりに代理人を使用することを検討する必要があります。
何らかの理由でイベントモデルを使用するように制限されていて、イベントハンドラの割り当てを制御したい場合は、元のクラスを継承し、同じクラスの名前とシグネチャでイベントを作成する方法がありますベースクラスのように(元のイベントが隠されているようnew
キーワードを使用して)、およびイベントハンドラを着脱する方法を追跡:
私は混乱しています。
'+ = new EventHandler(...)'の呼び出しを検出して停止できますか?
あなたのコードを整理する必要があると思います。または、あなたの質問に再度語りましょう。
public class BaseClass
{
public event EventHandler SomeEvent;
}
public class MyClass : BaseClass
{
private int _refCount = 0;
public new event EventHandler SomeEvent
{
add
{
if (_refCount > 0)
{
// handler already attached
}
base.SomeEvent += value;
_refCount++;
}
remove
{
base.SomeEvent -= value;
_refCount--;
}
}
}
が公にイベントを公開いけません。それをプロパティとして公開します。これにより、外部クラスがハンドラをアタッチしているときを制御できます。
クラスMyClass { private EventHandler _myEvent;ここでは、この上の
public event EventHandler MyEvent
{
[MethodImpl(MethodImplOptions.Synchronized)]
add
{
_myEvent = (EventHandler)Delegate.Combine(_myEvent, value);
}
[MethodImpl(MethodImplOptions.Synchronized)]
remove
{
_myEvent = (EventHandler)Delegate.Remove(_myEvent, value);
}
}
...
}
詳細
これは彼が探していたものだと思います。ニース、あなたはC#でこの種のことをすることができることを認識していませんでした。 – James
- 1. Silverlightのデバッグ。プロセスを添付しないでください
- 2. 添付ファイルをLaravelのメールに添付してください
- 3. Jqueryプラグインの開発、ブラウザのイベントとメソッドを添付してください。
- 4. ion-contentにscroll = "false"をプログラムで添付してください
- 5. Powershell Outlookのサブフォルダに添付ファイルを保存しないでください。
- 6. Eclipse(アンドロイド)の添付ソースを変更してください
- 7. Anacondaに外部パッケージを添付してください。
- 8. nodejsライブラリのtwimlレスポンスにmessagingServiceSidを添付してください。
- 9. ファイルを電子メールに添付してください。
- 10. 作業オブジェクトにCSVファイルを添付してください
- 11. ウェブページにローカル写真を添付してください
- 12. メインコンテンツエリアに左メニューを添付してください
- 13. SVNリポジトリにdoxygenドキュメントを添付してください
- 14. 120MBのオーディオファイルをIonic 2 Appに添付してください。
- 15. 流星のメールにpdfを添付してください
- 16. Slack Web hook - git diffを添付してください。
- 17. rails: "head:ok"レスポンスにいくつかのデータを添付してください
- 18. テキストファイルにあらかじめ添付してください
- 19. sendgridヘルパーが正しく動作していないノードjsにPDFを添付してください。
- 20. 角度:入力イベントの値を変更してください
- 21. 入力ボックスに観測可能なRXを添付してください
- 22. メールの添付なしで直接.icsファイルのイベントを開く
- 23. イベント「アンロード」のページを更新しないでください
- 24. Firebase:自分のイベントを登録しないでください
- 25. UITableViewでセルを再利用しないでください
- 26. 再度ツリービューを有効にしてください
- 27. 不可能:チェックして、再度確認してください
- 28. イベントがまだ停止していない場合、再度トリガーしないようにする方法を教えてください。
- 29. knstr :: include_graphics()でRStudioノートブックに画像を添付してください
- 30. クリックされたリンクのテキストをURLに添付してください。
は、彼はちょうどハンドラは、renderイベントをサブスクライブメッセージを表示しようとしていると考えて....とは思いませんそれが可能だ。 – James
さて、私は少し不明だったかもしれないが、状況は私はコントロールを継承しているDataGridViewコントロール私はCellPaintイベントのイベントハンドラを添付している。私のコントロールを使用する人がこのイベントに別のイベントハンドラを添付して、さまざまな問題を引き起こす可能性があることをメッセージで伝えたい場合 よろしくお願いします。 Iordan – IordanTanev