已经在此搜索了许多当前文章,并尝试了许多代码和变体,但仍然无法实现我想要的。
在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,但是显然我没有正确地完成操作。
最感谢您的协助。谢谢!
答案 0 :(得分:0)
private void button1_Click(object sender, EventArgs e)
=> GetEvents(button1).ForEach(ev => MessageBox.Show($"Name: {ev.Name}"));
private List<EventInfo> GetEvents(Control control)
=> control.GetType().GetEvents().ToList();
看看是否正是您想要的...