VBA控件教程:编写处理事件的代码

2015-06-05 00:05 阅读 73 次 评论关闭

一旦声明了 WithEvents 变量,变量名就出现在模块“代码”窗口左边的下拉菜单上。当选择了 mWidget 时,Widget 类的事件将出现在右边下拉菜单上。

选定一个事件,将显示相应的事件过程,以 mWidget_ 为前缀。所有跟 WithEvents 变量相关联的事件过程,都将以该变量名为前缀。将下面的代码添加到 mWidget_PercentDone 事件过程中。

Private Sub mWidget_PercentDone(ByVal Percent As _
Single, Cancel As Boolean)
   lblPercentDone.Caption = CInt(100 * Percent) & "%"
   DoEvents
   If mblnCancel Then Cancel = True
End Sub

不论何时,引发 PercentDone 事件时,事件过程就在 Label 控件中显示完成的百分比。DoEvents 语句允许重新画出该标签,同时也给用户单击“取消”按钮的机会。将下面的代码添加到标题为“取消”按钮的 Click 事件中。

Private Sub Command2_Click()
   mblnCancel = True
End Sub

当 LongTask 正在运行时,如果单击了“取消”按钮,一旦 DoEvents 语句允许出现对事件的处理,那么将会执行 Command2_Click 事件。模块级的变量 mblnCancel 设置为 True,mWidget_PercentDone 事件将对其进行测试,并将 ByRef Cancel 参数设置为 True。

连接 WithEvents 变量与对象

Form1 已经设置了对 Widget 对象事件的处理。剩余工作就是寻找某个地方的 Widget。

在设计时,声明 WithEvents 变量时,并没有任何对象与之相关联。WithEvents 变量与任何其它对象变量相同。必须创建对象,并将对该对象的引用赋给这个 WithEvents 变量。将下面的代码添加到 Form_Load 事件过程中,以创建 Widget。

Private Sub Form_Load()
   Set mWidget = New Widget
End Sub

当执行上面的代码时,Visual Basic 将创建一个 Widget,并将它的事件跟 mWidget 相关联的事件过程连接起来。从那时起,一旦 Widget 产生了 PercentDone 事件,都将执行 mWidget_PercentDone 事件过程。

为了调用 LongTask 方法,将下面的代码添加到标题为“启动任务”按钮的 Click 事件中。

'“启动任务”按钮。
Private Sub Command1_Click()
   mblnCancel = False
   lblPercentDone.Caption = "0%"
   lblPercentDone.Refresh

   Call mWidget.LongTask(14.4, 0.66)

   If Not mblnCancel Then lblPercentDone.Caption = 100
End Sub

在调用 LongTask 方法之前,完成百分比的显示标签必须被初始化,而且必须将模块级的 Boolean 标记(其作用是取消方法)设置为 False。

用 14.4 秒任务延迟调用 LongTask。每隔三分之二秒引发一次 PercentDone 事件。每次引发该事件时,都将执行 mWidget_PercentDone 事件过程。

LongTask 结束以后,都要测试 mblnCancel,以了解 LongTask 是否正常结束,或者是否因为 mblnCancel 设置为 True 而停止。只有在前一种情况下,完成的百分比才会被更新。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:VBA控件教程:编写处理事件的代码 | 猎微网

评论已关闭!