是否可以使用VB.NET确定某个事件是否附加了任何处理程序?我不拥有该事件,在这种特殊情况下,我想知道Windows.Forms.MenuStrip中的哪些项目处理了ToolstripMenuItem.Click事件。
答案 0 :(得分:1)
如果不创建自己的事件结构,或者可能使用反射来获取私有编译器实现的成员,我认为这是不可能的。
我刚刚编译了一个小片段并通过Reflector运行它。
原始代码
RemoveHandler d.CollectionChanged, AddressOf DestinationsChanged
AddHandler d.CollectionChanged, AddressOf DestinationsChanged
最终出现在反射器中的是什么
Me.$STATIC$get_Destinations$200126C$d.remove_CollectionChanged(New NotifyCollectionChangedEventHandler(Me, DirectCast(Me.DestinationsChanged, IntPtr)))
Me.$STATIC$get_Destinations$200126C$d.add_CollectionChanged(New NotifyCollectionChangedEventHandler(Me, DirectCast(Me.DestinationsChanged, IntPtr)))
请注意,.net似乎使用了一些编译器生成的可观察集合来跟踪事件。
你+可能+能够使用反射进入类并检索那些内部定义的集合,然后枚举它们的内容,但我从未尝试过。
另一种选择可能是为相关事件推送自己的事件处理结构。
查看此文章了解更多信息。
http://www.codeproject.com/KB/cs/EventChain.aspx
为了进一步调查,我强烈建议您抓一份Reflector。