软件开发技术交流

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

今天在社区碰到了一个比较有意思的问题,将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);
         }


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ojlovecd/archive/2008/09/05/2886587.aspx

posted on 2010-04-13 13:46  Felix888  阅读(162)  评论(0)    收藏  举报