浅析Visual C#事件处理机制
Posted on 八月 16rd, 2007 由 admin
热门问答:
推荐阅读
| · 关于smart movie直接转换rm格式的方法 |
| 摘要:以前写了用batchrealproducer怎样转换rm文件,可是有的朋友就觉得它的缺点就是不能全屏播放,没有smartmovie转出来的感觉好,其实smartmovie也是可以直接转换rm文件的,rm格式的视频用一般的转换方法是不行的,要么转不了,即使能转转出来的也是非常模糊,马赛克严重。下面就给大家来介绍正确的转换方法:同样需要下载安装realalternative插件,由于...... |
| · 戴尔将在亚洲建立第三个pc制造厂 提高销售额 |
| 摘要: 全球最大的个人电脑制造商戴尔公司称,为了能够更为快速地向澳大利亚、新加坡和印度等国家消费者提供定制产品,它将在亚洲建立第三个pc制造工厂。 位于美国德克萨斯州roundrock的戴尔公司周五称,该工厂将从南亚国家获得订单。南亚国家业务占戴尔总销售额的三分之一。戴尔目前在亚洲有两个正在运营的工厂,一个在日本,另一个在中国的厦门,这两个工厂服务范围是北亚地区。戴尔没有透露这个亚洲第三座制造工厂将于什么时间建...... |
正文
事件简介:
任何进行过图形用户界面开发的编程人员都会知道事件的概念。当用户在使用程序的时候,用户必然要和程序进行一定的交互。比如当用户点击窗体上的一个按钮后,程序就会产生该按钮被点击的事件,并通过相应的事件处理函数来响应用户的操作。这样用户的直观感觉就是程序执行了我要求的任务了。当然,事件并不一定是在和用户交互的情况下才会产生的,系统的内部也会产生一些事件并请求处理的,比如时钟事件就是一个很好例子。不过要介绍c#中的事件处理机制(扩展到更广的范围便是整个.net框架),我们首先得明白一个叫"委托"的概念。
c#中的委托:
委托,顾名思义,就是中间代理人的意思。c#中的委托允许你将一个对象中的方法传递给另一个能调用该方法的类的某个对象。你可以将类a中的一个方法m(被包含在某个委托中了)传递给一个类b,这样类b就能调用类a中的方法m了。同时,你还可以以静态(static)的方式或是实例(instance)的方式来传递该方法。所以这个概念和c++中的以函数指针为参数形式调用其他类中的方法的概念是十分类似的。
委托的概念首先是在visual j++中被提出来的,现在c#也应用了委托的概念,这也可谓是"拿来主义"吧。c#中的委托是通过继承system.delegate中的一个类来实现的,下面是具体的步骤:
1. 声明一个委托对象,其参数形式一定要和你想要包含的方法的参数形式一致。
2. 定义所有你要定义的方法,其参数形式和第一步中声明的委托对象的参数形式必须相同。
3. 创建委托对象并将所希望的方法包含在该委托对象中。
4. 通过委托对象调用包含在其中的各个方法。
以下的c#代码显示了如何运用以上的四个步骤来实现委托机制的:
c#中的事件处理函数:
c#中的事件处理函数是一个具有特定参数形式的委托对象,其形式如下:
其中第一个参数(sender)指明了触发该事件的对象,第二个参数(e)包含了在事件处理函数中可以被运用的一些数据。上面的myeventargs类是从eventargs类继承过来的,后者是一些更广泛运用的类,如mouseeventargs类、listchangedeventargs类等的基类。对于基于gui的事件,你可以运用这些更广泛的、已经被定义好了的类的对象来完成处理;而对于那些基于非gui的事件,你必须要从eventargs类派生出自己的类,并将所要包含的数据传递给委托对象。下面是一个简单的例子:
在事件处理函数中,你可以通过关键字event来引用委托对象,方法如下:
现在,我们来创建两个类,通过这两个类我们可以知道c#完成事件处理的机制是如何工作的。在我们的实例中,a类将提供事件的处理函数,并在步骤3中创建委托对象同时将事件处理函数包含在其中,同上所述,事件处理函数的参数形式必须和委托对象的参数形式相一致。然后,a类将委托对象传递给b类。当b类中的事件被触发后,a类中的事件处理函数就相应的被调用了。下面是示例代码:


讨论区