我试图获取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
}总是返回null。我有一个过载的这个方法,其中的参数是一个“控制”,并正常工作。可能出什么问题了?PS:对不起,如果格式不对。我是新来的,想做好每件事。
发布于 2014-11-29 16:30:52
在GetField (第3行)中缺少一个绑定标志: BindingFlags.FlattenHierarchy。
没有它,您将找不到"EventClick“字段,fieldInfo将始终为NULL,这本身就会导致问题。
我用此更改测试了您的代码,如果您实际上有一个与Click事件相关联的事件,它可以正常工作,否则会导致异常(参见Hans关于测试null的注释)。
https://stackoverflow.com/questions/27204062
复制相似问题