| 发表于:2007-03-28 14:36:149楼 得分:0 |
比如定义一个button按纽的click事件,电脑是怎么分析出这个是单击而不是双击啊?还是敲键盘啊,是哪个参数决定的类别的?我怎么找不到相关代码, ----------------------- 每个事件的触发条件都是人为定义的,电脑只是根据人的定义去引发事件。 比如,button 的 click 事件就是定义为有人单击该按钮或者该按钮被通过键盘按下(比如回车、空格、快捷键之类的)时被激发的。 至于所谓 sender, eventarg 楼上都讲得比较清楚了。 所谓 sender,就是事件的发送者,激发事件的控件(参考frjj的例子),eventarg 就是这个事件包含的相信信息。事件也可以不包含信息。 给些代码: public class increaseeventargs : eventargs { private datetime firetime; private int oldvalue; private int newvalue; public int newvalue { get { return newvalue; } } public int oldvalue { get { return oldvalue; } } public datetime firetime { get { return firetime; } } public increaseeventargs(int oldval, int newval) { this.firetime = datetime.now; this.oldvalue = oldval; this.newvalue = newval; } } public void increaseeventhandler(object sender, increaseeventargs e); public class eventsample : component { public event eventhandler click; public event increaseeventhandler increased; protected void onclick(eventargs e) { if(click != null) { click(this, e); } } protected void onincreased(increaseeventargs e) { if(increased!= null) { increased(this, e); } } int i; public void increaseint(int step) { int temp = i; i += step; onincreased(new increaseeventargs(temp, i)); } } 当外界通过某种方法调用 increaseint 方法时,就会激发 increased 事件。如果你的事件处理程序这样写: private eventsample ctr1; ctr1.id = "ctr1 "; ctr1.increased += new increaseeventhandler(ctr1_onincreased); private void ctr1_onincreased(object sender, increaseeventargs e) { //.... } 事件被激发后,上面的方法将会被执行,这是, sender 就是 ctr1,e 里就是包含了事件激发的时间,旧值和新值的 increaseeventargs 的实例。 | | |
|