1.非设计界面类(控制类,假设为Control.cs)需要给动态生成的控件添加click事件,假设这个控件叫control
 control.Click +=new EventHandler(control_click);
 真实的,这里是没有control_click这个方法的
 那么我们就定义这样一个方法,这也是面向对象的程序设计的宗旨.2.在定义这个方法之前,我们需要首先定义相关的事件和委托
  首先定义一个委托 public delegate void clickDelegate(object sender,EventArgs e);
  基于这个委托定义一个事件 public evnet clickDelegate clickEvent;//事件是委托的一个实例3.private void control_click(object sender,EvnetArgs e)
{
if(clickEvent != null)
clickEvnet(sender,e);//把参数传入
}4.而在设计界面,比如Form1.cs,我们可以定义好click如何响应.
Control c = new Control();
c.clickEvent +=new Control.clickDelegate(xc_clickEvent);
我们只需要在界面这边完成xc_clickEvent的实现即可以了.5.private void xc_clickEvent(object sender,EventArgs e)//参数要一致
{
MessageBox.show(sender.getType().ToString());
}6.接下来,我们从运行的角度来看一看.
当用户点击这个在控制类里,即后台动态生成的控件后
因为我们在控制类生成control的时候给他加了一个事件,control.Click +=new EventHandler(control_click);
那么控制类将通知他的订阅者,即首先执行EventHandler里的control_click方法,
在这个方法里,我们判断事件是否为空,不为空的话,继续通知事件的订阅者,这里是通知委托clickDelegate7.订阅clickDelegate是在界面里完成的,那么我们转向Form1.cs,我们将清楚的看到,将执行clickDelegate注册时登记的方法xc_clickEvent,即MessageBox.Show(sender.getType().ToString())