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())
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())
解决方案 »
- 请问C#读写串口的方法
- 请问如何手动创建一个完整的dataset呢??不同过sql语句访问数据库的形式
- 怎样获取SQL自动编号?
- 花了一天时间做了个聊天室,大家up有分http://bbs.shareach.com
- 关于数据库优化的问题
- DbDataAdapter.Update()更新的DATASET是不是表一定要设主键?
- 关于控件拖动程序中用到的Offset()方法中偏移量为什么是负的
- 一个编码的乱码问题!求解决。
- 请问WinForm有loaded消息吗?
- vs.net&Visio 2002
- 线程问题(线程间操作无效: 从不是创建控件“results”的线程访问它。)
- 做c#时关于dll文件与exe文件重名的问题
不过,不要把control.Click 扯进来,这个例子不够好.