Überwachen Sie die Kontrolle, um Ereignisse zu bestimmen, die ausgelöst werden?

8

Gibt es eine Möglichkeit, alle ausgelösten Ereignisse für bestimmte WinForms-Steuerelemente aufzulisten, ohne explizit einen Handler für jedes mögliche Ereignis zu erstellen? Ich möchte zum Beispiel die Abfolge von Ereignissen sehen, die während verschiedener Datenbindungsaktionen zwischen einem DataGridView und der BindingSource ausgelöst werden.

    
BikeMrown 31.03.2009, 16:05
quelle

3 Antworten

8

Sie könnten Reflektionen verwenden, aber es wird wegen der verschiedenen involvierten Event-Handler-Signaturen etwas schwierig. Im Grunde müssten Sie die EventInfo für jedes Ereignis in dem Typ abrufen und das EventHandlerType Eigenschaft, um herauszufinden, welcher Delegattyp vor dem Aufruf von AddEventHandler . Delegate.CreateDelegate funktioniert für alles, was dem normalen Event-Handler-Muster folgt, obwohl ...

Hier ist eine Beispiel-App. Beachten Sie, dass es keine Überprüfung durchführt - wenn Sie etwas mit einem "Nicht-Standard" -Ereignis geben, wird eine Ausnahme ausgelöst. Sie können relativ leicht die Reflektion verwenden, um auch die Ereignisargumente auszudrucken.

%Vor%     
Jon Skeet 31.03.2009, 16:17
quelle
1

Ich denke, du könntest Reflection dazu benutzen.

    
John Saunders 31.03.2009 16:07
quelle
0

Dies ist nicht möglich. Wenn Sie Reflector verwenden, um viele der Klassen des Frameworks anzuzeigen, finden Sie beim Auslösen von Ereignissen ein allgemeines Muster:

%Vor%

Das Ereignis wird also nicht einmal ausgelöst, wenn niemand es abonniert hat

    
Mike Marshall 31.03.2009 16:08
quelle

Tags und Links