Henry的VB.NET之旅(十五)—动态事件处理方法
点击次数:54 次 发布日期:2008-11-06 08:07:48 作者:源代码网
|
源代码网推荐 源代码网推荐 韩睿 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐“大李哥,”我不免为自己问了如此多的问题而不好意思起来,“您刚才所说的事件的委托是怎么回事呀?” 源代码网推荐 源代码网推荐大李显然是明白我会提问的:“我所说过事件驱动设计中的三要素你还记得吧?” 源代码网推荐 源代码网推荐“当然,就是指对象、事件和事件处理程序。”我流利地回答道。 源代码网推荐 源代码网推荐“对象和事件处理程序我们已经分析过了。要想彻底了解事件驱动程序的来龙去脉,我们必须了解事件的构成。”见到我又一次茫然地摇头,他就接着说,“事件功能是由三个互相联系的元素提供的:提供事件数据的类、事件委托和引发事件的类。我说过,事件就是一个信号,它告知应用程序有重要情况要发生。那么我们可以想象一下,事件要发生,就会含有独特的信息,比如,事件发送源是什么,会发生什么样的事件。提供事件数据的类就是用于记录这些信息的。该类必须从 System.EventArgs 派生出,这个我们已经说过了;事件的委托,这其实我也说过了,就好比是指向事件接收方的一个指针,由于指定对象的事件是独特的,所以它的委托也是事先定义好的,就比如MouseDown事件,它对应的委托就是MouseEventHandler。我们看一下你在代码窗口选Label1对象的MouseDown方法,会自动生成这段空的事件处理程序: 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐Friend WithEvents Label1 As System.Windows.Forms.Label 源代码网推荐 源代码网推荐Private Sub Label1_MouseDown(ByVal sender As Object, ByVal e As _ 源代码网推荐 源代码网推荐System.Windows.Forms.MouseEventArgs) Handles Label1.MouseDown 源代码网推荐 源代码网推荐End Sub 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐它其实就等同于: 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐AddHandler Label1.MouseDown, AddressOf Label1_MouseDown 源代码网推荐 源代码网推荐Private Sub Label1_MouseDown(ByVal sender As Object, ByVal e As _ 源代码网推荐 源代码网推荐System.Windows.Forms.MouseEventArgs) 源代码网推荐 源代码网推荐End Sub 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐隐含的意思,就是通过先前已经声明为全局变量的事件委托MouseEventHandler来实现事件处理程序参数的定义。对于MouseDown事件而言,为什么自动加上的事件数据类参量是MouseEventArgs类的,就是委托的作用了。 源代码网推荐 源代码网推荐第三个要素是引发事件的类。该类必须提供事件的声明和引发事件的方法。其中引发事件的方法必须命名为On加上事件名的形式,比如事件是EventHR,那么引发事件的方法就一定叫OnEventHR。” 源代码网推荐 源代码网推荐一边说着,大李开始修改起刚才用于标准事件处理程序的代码来: 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐Module Module1 源代码网推荐 源代码网推荐"事件数据类 源代码网推荐 源代码网推荐 Public Class HenryEventArgs 源代码网推荐 源代码网推荐 Inherits EventArgs 源代码网推荐 源代码网推荐 End Class 源代码网推荐 源代码网推荐 "声明委托 源代码网推荐 源代码网推荐 Public Delegate Sub HenryEventHandler(ByVal sender As Object, _ 源代码网推荐 源代码网推荐 ByVal e As HenryEventArgs) 源代码网推荐 源代码网推荐 Public Class CHenry 源代码网推荐 源代码网推荐 " 声明一个事件 源代码网推荐 源代码网推荐 Public Event EventHR As HenryEventHandler 源代码网推荐 源代码网推荐 Protected Overridable Sub OnEventHR(ByVal e As HenryEventArgs) 源代码网推荐 源代码网推荐 "调用委托 源代码网推荐 源代码网推荐 RaiseEvent EventHR(Me, e) 源代码网推荐 源代码网推荐 End Sub 源代码网推荐 源代码网推荐 Public Sub start() 源代码网推荐 源代码网推荐 Dim e As HenryEventArgs 源代码网推荐 源代码网推荐 OnEventHR(e) 源代码网推荐 源代码网推荐 End Sub 源代码网推荐 源代码网推荐 End Class 源代码网推荐 源代码网推荐 Dim obj As New CHenry() 源代码网推荐 源代码网供稿. |
