2013-02-12 7 views
5

私の質問のための助けを見つけることができず、stackoverflowは何も持たないか、それを探す方法を知らなかった(私が間違っていれば私を修正してください。この質問)。私のプログラムでデバッガ(VS Professional 2012)を使用してイベントのリストを見つける方法は?

、私はコードでdefindedいくつかのイベント有しているGridている:私のプログラムの実行中に今

public Grid _grid = new Grid(); 
_grid.MouseLeftButtonDown += new MouseButtonEventHandler(MyMethod); 
//and a few more events... 

を、私はいくつかのイベントから来ることができるいくつかの奇妙な行動を見たので、私は設定しますデバッガを使用するためにプログラムを停止しました。

メンバーの現在定義されているすべてのイベントをリストしたリストがありますか?不要なイベントがまだ削除されていないことを確認できますか?

答えて

4

イベント部材のみ-=又は+=操作者の左手側にあることを意味する2

残念なことに、WPF(すなわちUIElement上)で最もイベントを手動add/removeを実装することによって実現される更新(すなわち、それは「読む」ことはできません)。内部は、各イベントがイベントのコレクションに「委任」され、そのコレクションには割り当てられたイベントの要素のみが含まれています(たとえば、単一のMouseLeftButtonDownEvent += somehandler;がある場合、そのイベントのコレクションには1つのエントリしかありません)。コレクションを照会するために構造体のインスタンス(RoutedEventHandlerInfo、FWIW)をインスタンス化することはできません(UIElement.EventHandlersStore._entries、FWIW) 。たとえば、あなたは、あなたが特定のクイックウォッチ]ウィンドウのようなイベントのためのハンドラを照会することができできれば:。

grid.EventHandlersStore._entries[ 
    new RoutedEventHandlerInfo(UIElement.MouseLeftButtonDownEvent, false)] 

しかし、デバッガはあなたが内部のコンストラクタを呼び出すことはできません

という名前のイベントはありません。イベントはです。デバッガでインスタンスのすべてのメンバーを見ることができます(ウォッチ、クイックウォッチなど)、イベントには別個のアイコンがあります。これらのそれぞれを展開して、どのメソッドがイベントに割り当てられているかを確認できます。たとえば、次のように

enter image description here

あなたが見ることができるように、MyEventは、この特定のインスタンスのための方法t_MyEventを「割り当て」されています。

更新:あなたがイベントに割り当てられ、複数のイベントハンドラを持っている場合 は、デバッガだけ速い時計でのイベントのトップレベルの最後の割り当て方法が表示されます。 すべてメソッドが割り当てられていることを確認するには、呼び出しリストをドリルダウンする必要があります。たとえば:

enter image description here

。これはt_MyEventt_MyEvent2両方がMyEventのための呼び出しリストにあることを示しています。ハンドラがない場合、MyEventの値はnullになります。

+0

ありがとうございました。私の例では、 "_Grid"を展開するとどこかで "MouseLeftButtonDown"を見ることができますか?私は "ローカル"のウィンドウを見ていますが、何も見えません... – phil13131

+0

おそらく、複数の代議員がイベントに割り当てられていますが、私はそれを含む答えを更新しました... –

+0

私のプログラムでは、メソッドが各イベントに割り当てられていますが、例えば、 'MouseButtonEventHandler'です。私はinvocationListを探していたが見つかりませんでした。 WPFの 'Grid'のサンプルを親切に見せてもらえますか?たぶんそれは少し異なっているかもしれません。 – phil13131

関連する問題