|
||
4.5 委托与事件 4.5.1 事件 1.事件的相关概念 虽然可以将VB.NET项目可视化为一系列按序执行的过程,但实际上,大多数程序是事件驱动的,即执行流程由外部发生的事情(称为“事件”)决定的。所以事件程序是VB.NET程序设计的核心。 事件是有对象发出的消息,通知有事情发生。事件是一个信号,它告知应用程序有重要情况发生。例如:,用户单击窗体上的Button1控件时,窗体可能会引发一个Click事件。 事件发送器:任何能引发事件的对象都是事件发送方,也称“事件源”。窗体、控件和用户定义的对象都是事件发送器。例如用户单击窗体上的Button1控件时,事件发送器就是这个控件Button1。 事件处理程序:它是相应事件发生时调用的过程。可以将任何有效过程用作事件处理程序。可是不能将函数用作事件处理程序,因为它不能将值返回给事件源。例如,用户单击窗体上的某个控件时,窗体可能会引发一个Click事件,并调用一个处理该事件的过程Button1_Click。 2.Handles关键字 在设计过程中使用Handles关键字用于声明某个过程处理一个指定事件。其使用语法格式如下: procdec Handles eventlist 其中,procdec指将处理事件的过程的声明,eventlist是要处理的procdec的事件的列表。 在VB.NET中事件通过委托关联到事件处理程序,使得能够为多个对象创建一个事件处理程序。 3.建立事件 除了在设计阶段设计事件处理过程的方法,在运行阶段也可以动态地设计事件处理过程,一般是在类中进行的。 在类中除了有属性和方法之外,还有事件。事件是一种激发机制,通过事件的声明与激发机制,可以使对象具有与应用程序进行交互的能力。 事件与属性、方法的最大区别在于:属性和方法对应的代码是在创建类时预先设计好的。当类的使用者调用什么方法,则系统自动地调用相应的代码。对于事件,在创建类时,只需声明事件,并决定在什么地方中被触发,对于响应事件后,应用程序执行什么样的操作由类的使用者来决定。 在类中建立事件,其基本过程如下: (1)在类中使用Event语句声明一个事件 其语法格式如下: Public Event 事件名(参数列表) 其中,“参数列表”与过程或函数定义的参数列表时一样的。 (2)在类中的某个方法中,使用RaiseEvent语句激发事件 其语法格式如下: RaiseEvent 事件名(实参列表) (3)定义事件处理过程 定义事件处理过程的方式和定义普通过程相同。 (4)使用AddHandler来指定对象的事件过程 AddHandler语句动态地将事件与事件处理程序过程连接。其语法格式如下: AddHandler event,AddressOf eventhandler 其中,event指要处理的时间的名称,eventhandler指对应的事件处理过程的名称,AddressOf是委托运算符。 (5)使用WithEvents语句 用Handler关键字需要指出时间“事件源”,将事件和事件处理过程的关联称为静态关联,相对比,AddHandler关键字实现的是动态关联。 如果对象是过程中声明的(局部对象变量),只能采用AddHandler语句进行动态关联。使用Handler关键字也可以进行动态关联,但需将对象声明为全局对象变量,而且还要用WithEvents语句来声明,方可用Handler来定义事件处理过程。其语法格式如下: Dim WithEvents 对象 As New类名 说明: 在Handler关键字进行动态关联时,必须用WithEvents语句声明的对象才可以响应在类中的事件,否则对象对所生成的任意事件都将忽略。 为对象响应改事件编写事件处理过程。这与以前编写的事件处理过程方法相同,编写事件处理过程时,应以“对象名_事件名”作为事件处理过程的过程名,并以Handler关键字来指定此过程所要处理的是哪一个事件,其语法格式如下: Private Sub对象名_事件名(参数列表) Handles 对象名.事件名 |