检索 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:对不起,如果格式不正确。我是新来的,想把每件事都做好。

检索 ToolStripButton 事件会引发异常

您在 GetField 中缺少一个绑定标志(第 3 行):BindingFlags.FlattenHierarchy。

没有它,您将找不到字段"EventClick",并且字段信息将始终为NULL,这本身会导致问题。

我使用此更改测试了您的代码,如果您实际上有一个与 Click 事件关联的事件,它会正常工作,否则会导致异常(请参阅 Hans Passant 关于测试 null 的评论)。