动态事件订阅和取消订阅C#事件 [英] Dynamic event subscribe and unsubscribe to a C# event
问题描述
如何在Windows窗体应用程序中动态订阅和取消订阅C#事件。因此,给定一个Object实例和一个包含事件名称的String名称,您订阅该事件并在该事件被触发时执行某些操作?
我尝试过:
string _EventHandler = string.Empty;
_EventHandler = cntrl + @。 + _EventName;
_EventHandler + = new EventHandler(SaveData);
private void SaveData(object sender,EventArgs e)
{
//做某事
}
How to dynamically subscribe and unsubscribe to a C# event in windows Forms Application. so that given a Object instance and a String name containing the name of the event, you subscribe to that event and do something when that event has been fired?
What I have tried:
string _EventHandler = string.Empty;
_EventHandler = cntrl + @"." + _EventName;
_EventHandler += new EventHandler(SaveData);
private void SaveData(object sender, EventArgs e)
{
// doing something
}
推荐答案
不太难......只是凌乱,因为你需要玩耍。试试这个:
Not too difficult ... just messy, because you need to play around. Try this:
private void AddHandler(Control c, string eventName, EventHandler handler)
{
Type t = c.GetType();
EventInfo ei = t.GetEvent(eventName);
ei.AddEventHandler(c, handler);
}
但我希望你有充分的理由,因为它不会提高你的代码可读性......
But I hope you have a good reason, because it's not going to improve your code readability...
你好我得到解决方案的是我的代码
//订阅事件以调用其他类方法的代码
//添加方法的代码在控件事件的另一个类中
//这里_EventName是事件的名称(Click,Enter,Leave等..)
//在MyEventsHandler类我有一个SaveData方法
EventHandler eHandler = new EventHandler(MyEventsHandler.SaveData);
AddHandler(cntrl,_EventName,eHandler);
//添加Eventhandler的函数
private void AddHandler(Control c,string eventName,EventHandler handler)
{
尝试
{
类型t = c.GetType();
EventInfo ei = t.GetEvent(eventName);
ei.RemoveEventHandler(c,handler);
ei.AddEventHandler(c,handler);
}
catch(exception ex)
{
MessageBox.Show(System.Reflection.MethodInfo.GetCurrentMethod()。Name ++ ex.Message,
错误, MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
Hi I got the solution here is my code
// Code for subscribing an event to call other class method
// code for adding a method in another class to the control event
// here _EventName is the name of the event (Click, Enter, Leave etc..)
// In MyEventsHandler class I have a SaveData method
EventHandler eHandler = new EventHandler(MyEventsHandler.SaveData);
AddHandler(cntrl, _EventName, eHandler);
//Function to add Eventhandler
private void AddHandler(Control c, string eventName, EventHandler handler)
{
try
{
Type t = c.GetType();
EventInfo ei = t.GetEvent(eventName);
ei.RemoveEventHandler(c, handler);
ei.AddEventHandler(c, handler);
}
catch (Exception ex)
{
MessageBox.Show(System.Reflection.MethodInfo.GetCurrentMethod().Name + " " + ex.Message,
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
这篇关于动态事件订阅和取消订阅C#事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!