您的位置:首页 > 其它

使用反射令2个事件在不知道方法名的情况下使用同一个处理方法

2008-09-05 16:35 453 查看
今天在社区碰到了一个比较有意思的问题,将button1的Click事件与button2的Click事件在不知道方法名的情况下如何使用同一个处理方法,我之前已经解答了一个类似的问题,是要用到委托列表类实现的,上代码:
private void Form1_Load(object sender, EventArgs e)
{
Button btn1 = new Button();
btn1.Text = "button1";
btn1.Click += new EventHandler(delegate(object s, EventArgs e2) { MessageBox.Show(s.ToString()); });
btn1.Name = "btn1";
btn1.Location = new Point(10, 10);
this.Controls.Add(btn1);
Button btn2 = new Button();
btn2.Text = "button2";
btn2.Name = "btn2";
btn2.Location = new Point(10, 30);
Type t = btn1.GetType();
PropertyInfo pi = t.GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);//获取button1的事件属性
EventHandlerList ehl = (EventHandlerList)pi.GetValue(btn1, null);//获取button1的委托列表
FieldInfo fieldInfo = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
Delegate d = ehl[fieldInfo.GetValue(null)];
btn2.Click += (EventHandler)d;
this.Controls.Add(btn2);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐