给类添加事件

可以给部件中的任何类添加事件。部件所提供的类中声明的事件都可以被客户端使用,而不管部件是在进程内还是进程外运行。所有的事件都是公共的。

使用 Event 关键字声明事件:

Event SomethingHappened(   ByVal HowMuch As Double, _
      ByVal When As Date)

注意   可以就象声明对过程的参数那样,声明事件参数,只是有以下例外。事件拥有不能命名参数、可选参数或 ParamArray 参数。事件不具有返回值。

每当定义的事件满足产生环境时,类模块的代码中就产生事件。

   If blnSomethingHappened Then
      RaiseEvent SomethingHappened(dblPriceIncrease, _
         Now)
   End If

当类的实例产生该事件后,某一特定对象处理该事件的任何一个客户端的 SomethingHappened 事件过程的代码将被执行。事件必须按对象顺序处理;客户端不能从某一特定类当前存在的所有对象中选择对象来处理事件。

如果有多个客户端引用同一个对象,并且正在处理该对象产生的一个事件,则只有在所有的客户端处理完该事件后,控制权才可能返回给该部件。

客户端可以通过声明为 ByRef 而非 ByVal 的参数来响应事件。这将使得任何客户端都可以改变参数的值。继续执行时,可以在 RaiseEvent 的后一行检查参数值并采取适当的动作。

使用 Visual Basic 窗体的 QueryUnload 事件时,这种技巧经常用于 Cancel 参数。

注意   Visual Basic 为每个窗体产生一个独立的 QueryUnload 事件;如果一个窗体取消该事件,对后续窗体的事件将不再产生。

如“建立代码部件”所述,事件可代替回调函数。两种方案的功能是相同的,不过对部件的设计者和用户来说,使用事件的实现方案更简单。

事件不能在声明它们的类中处理。

详细信息 控件中事件的产生在“建立 ActiveX 控件”详述。关于事件产生和处理的语法见《Visual Basic 程序员指南》“用对象编程”的“给类添加事件”。