Ich möchte auf den Ereignishandler eines LinkButton
Command
Ereignis zugreifen, aber im Snippet unter fieldInfo
ist Null.Warum kann ich den Ereignishandler eines LinkButton-Ereignisses nicht mithilfe der Reflektion abrufen?
LinkButton button = new LinkButton();
button.Command += (s, e) => { };
Type type = button.GetType();
EventInfo[] eventInfos = type.GetEvents(BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
foreach (EventInfo eventInfo in eventInfos)
if (eventInfo.Name == "Command")
{
// fieldInfo is null
FieldInfo fieldInfo = eventInfo.DeclaringType.GetField(eventInfo.Name, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
Delegate delegates = (Delegate)fieldInfo.GetValue(button);
foreach (Delegate handler in delegates.GetInvocationList())
{
eventInfo.RemoveEventHandler(button, handler);
// or
eventInfo.AddEventHandler(button, handler);
// or do whatever with handler
}
}
-Code-Snippet wurde von this inspiriert.
Warum ist fieldInfo
null?
Gibt es eine andere Möglichkeit, den Ereignishandler eines LinkButton
Command
Ereignisses zu erhalten?
Auch Hans Passant Lösung funktioniert nicht auf LinkButton
mit Command
als Feldname.
Ich nehme an, das Ereignis hat explizite hinzufügen und entfernen Handler, und speichert seinen Delegaten nicht in einem dedizierten Feld. –