检索 ToolStripButton 事件会引发异常
本文关键字:异常 ToolStripButton 事件 检索 | 更新日期: 2023-09-27 18:32:37
我正在尝试获取 ToolStripButton 的事件列表,但我的代码第 6 行发生了错误:
public void GetEventHandlerList(ToolStripButton tsb)
{
PropertyInfo propertyInfo = tsb.GetType().GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
EventHandlerList eventHandlerList = propertyInfo.GetValue(tsb, new object[] { }) as EventHandlerList;
FieldInfo fieldInfo = typeof(ToolStripButton).GetField("EventClick", BindingFlags.NonPublic | BindingFlags.Static);
object eventKey = fieldInfo.GetValue(tsb);
var eventHandler = eventHandlerList[eventKey] as Delegate;
Delegate[] invocationList = eventHandler.GetInvocationList(); // <<<<<<==== Erro
// rest of the code
}
始终返回空值。我有此方法的重载,其中参数是"控件"并且工作正常。可能出现什么问题?PS:对不起,如果格式不正确。我是新来的,想把每件事都做好。
您在 GetField 中缺少一个绑定标志(第 3 行):BindingFlags.FlattenHierarchy。
没有它,您将找不到字段"EventClick",并且字段信息将始终为NULL,这本身会导致问题。
我使用此更改测试了您的代码,如果您实际上有一个与 Click 事件关联的事件,它会正常工作,否则会导致异常(请参阅 Hans Passant 关于测试 null 的评论)。