动态事件订阅和取消订阅C#事件 [英] Dynamic event subscribe and unsubscribe to a C# event

查看:333
本文介绍了动态事件订阅和取消订阅C#事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆