2009-08-19 6 views
0

私はイベントを追加したカスタムdatagridviewcolumnを持っています。 問題は、現在の列オブジェクトのイベントを誰が購読しているのかを確認し、それらのサブスクリプションをクローン列オブジェクトに追加する方法を理解できません。オブジェクトのイベントへのサブスクリプションを複製する方法はvnetですか?

イベントにハンドラを追加する代わりに、呼び出し元のプログラムにカスタム列のデリゲートにハンドラのアドレスを渡すように要求することで、この問題を回避できます。

私の用語を許して、私はあなたが何を言おうとしているのか理解してくれることを願っています!

このメソッドへの参照を受け取ることによって、datagridviewcolumnは現在制御権を持ち、その参照を簡単に複製できます。

これは問題ありませんが、コントロールのユーザーは、ビジュアルスタジオでイベントを選択することでイベントをサスペンスすることができます。これによってメソッドのテンプレートが作成されます。

答えて

1

少なくともC#では、プロパティのgetterやsetterなどのイベントに対して「adders」と「removers」を持つことができます。

誰かがイベントにイベントハンドラを追加している間にカスタム処理を行うことができますか?

Public Delegate Sub WorkDone(ByVal completedWork As Integer) 
Private handlers As New ArrayList() 

Public Custom Event WorkCompleted As WorkDone 
    AddHandler (ByVal value As WorkDone) 
    If handlers.Count <= 5 Then 
     handlers.Add(value) 
    End If 
    End AddHandler 

    RemoveHandler(ByVal value As WorkDone) 
    handlers.Remove(value) 
    End RemoveHandler 

    RaiseEvent (ByVal completedWork As Integer) 
    If completedWork > 50 Then 
     For Each handler As WorkDone In handlers 
     handler.Invoke(completedWork) 
     Next 
    End If 
    End RaiseEvent 
End Event 

これは、あなたのイベントハンドラのカスタマイズに役立つはずです、あなたがそのよう:私はVB.NETについて多くを知らないが、私は少しググて、次のスニペットを見つけ

EDIT
デリゲートがあなたのクラス内からイベントに追加されるのを見ることができます。

+0

ありがとう、それは私が後にしたものです。 – Jules

0

興味のある方は、私はカスタムイベントを必要とせずにこれを実行する方法にチャレンジしました。

イベント名の末尾にイベントを追加すると、いくつかのプロパティとメソッドにアクセスできます。 Thorstenの例では、イベントをWorkCompleted イベントと呼びます。

この質問に固有の方法は、イベントにアタッチされたデリゲートの一覧を返すGetInvocationListのメソッドです。

WorkCompleted イベント IsNot Nothingをチェックすると、呼び出しリストを取得せずにイベントのハンドラがあるかどうかがわかります。

η:投稿を送信すると、イタリック体が「*」として表示されます。理由は分かりません。

関連する問題