【发布时间】:2018-10-25 07:12:50
【问题描述】:
在这里搜索了很多关于这个问题的当前文章,并尝试了很多代码和变体,我仍然无法实现我想要的。
在 C# 中,我想将 Winforms 控件传递给一个方法,并让它返回该控件已订阅的任何类型的所有事件处理程序的列表。如果控件订阅了特定事件,则重载方法将简单地返回 true/false。
例如:
Button btn = new Button() ;
private void evt(object sender, EventArgs e) {}
private void mevt(object sender, MouseEventArgs e) {}
private List<string> GetSubscribedEventList<T>(T item) {}
private bool CheckEventSubscribed <T>(T item, string evtName) {}
In Main:
btn.Click += new EventHandler(evt) ;
btn.MouseUp += new MouseEventHandler(mevt) ;
List<string> events = GetSubscribedEventList(btn) ;
bool HasClickEvent = CheckEventSubscribed (btn,"CLICK") ;
list 方法将返回一个项目列表,这些项目是所有订阅事件的事件名称,列表中的每个项目一个事件。
显然,如果其他形式更灵活,则返回信息的形式可以不是字符串列表。
我需要这样的东西。我已经尝试生成 EventHandlerList 并使用键和 GetInvocationList,但显然我没有正确执行。
非常感谢您的帮助。谢谢!
【问题讨论】:
标签: c# events eventhandler