6

さて、私は私の質問の助けを見つけることができず、stackoverflowも何も持っていないようです、または私はそれを探す方法を知りませんでした(私が間違っている場合は私を訂正してください、そして私はこの質問を閉じます)。

私のプログラムにはGrid、コードでいくつかのイベントが検出されたがあります。

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

プログラムの実行中に、一部のイベントからのみ発生する可能性のある奇妙な動作が見られたため、ブレークポイントを設定し、デバッガーを使用するためにプログラムを停止しました。

メンバーの現在定義されているすべてのイベントをリストするリストをどこかに見つけることが_gridできるので、不要なイベントがまだ削除されていないことを確認できますか?

4

1 に答える 1

4

アップデート2

残念ながら、WPFのほとんどのイベント(つまり、on )は、手動で/をUIElement実装することによって実装されます。つまり、イベントメンバーは、または演算子の左側にのみ存在できます(つまり、「読み取る」ことはできません)。内部は、各イベントがイベントのコレクションに「委任」され、そのコレクションには割り当てられたイベントの要素のみが含まれるようになっています(たとえば、単一のイベントがある場合、そのイベントのコレクションには1つのエントリしかありません。残念ながら、イベントのコレクションには何が格納されますかハンドラーを表すは、コレクションをクエリするためにインスタンス化できる必要がある内部構造です。コレクションをクエリするために、その構造(、FWIW)のインスタンスをインスタンス化することはできません(addremove-=+=MouseLeftButtonDownEvent += somehandler;RoutedEventHandlerInfoUIElement.EventHandlersStore._entries、またFWIW)。たとえば、可能であれば、QuickWatchウィンドウで特定のイベントをハンドラーに照会できます。

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

ただし、デバッガーでは内部コンストラクターを呼び出すことはできません。

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

ここに画像の説明を入力してください

ご覧のとおり、この特定のインスタンスMyEventのメソッドが「割り当てられ」ています。t_MyEvent

更新: イベントに複数のイベントハンドラーが割り当てられている場合、デバッガーはクイックウォッチでイベントのトップレベルに最後に割り当てられたメソッドのみを表示します。割り当てられたすべてのメソッドを表示するには、呼び出しリストにドリルダウンする必要があります。例えば:

ここに画像の説明を入力してください

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

于 2013-02-12T18:32:35.180 に答える