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.
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%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