通过监听,触发事件

【分享成果,随喜正能量】是是非非耳边过,走心,但不留心,不执着,则不伤。。

《VBA中类的解读及应用》教程是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。

类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:通过监听,触发事件

通过监听,触发事件

第四十六讲 自定义事件中的监听过程(4)---- 俺老猪也有500岁了

(接上讲)

在前面的三讲中我们讲了类模块,窗体模块,以及标准模块的建立以及其中的部分代码,在这一系列的讲解中,我们了解了如何对事件源进行监听,那么监听的目的是什么呢?对了,就是在符合某个条件的时候触发我们的过程。

7 监听后,事件的触发

在这讲中我们讲解如果窗体的时间秒和myDOB的时间秒相等时所执行自定义事件BIR的过程。BIR过程我们是在类模块中定义的:

Public Event BIR(inAge As Integer)

这个过程需要传入一个参数inAge As Integer,这个参数是年龄。这个事件是在哪里呢?对的,由于事件是类的事件,我们就要在类的对象中去找寻,在窗体的加载过程中我们定义了Set objPigsy = New pigsy ,所以我们要在窗体的模块中写入这个事件,代码如下:

Private Sub objPigsy_BIR(inAge As Integer)

UserForm1.Image1.Visible = True

objPigsy.AgeA = objPigsy.AgeA + 1

UserForm1.Label1.Caption = Time & ",是俺" & objPigsy.Name & "的" & inAge & "岁生秒"

MsgBoxTimeOut 0, "俺" & objPigsy.Name & inAge & "岁生秒了", "提示", 64, 0, 5000

'MsgBox "俺" & objPigsy.Name & inAge & "岁生秒了"

UserForm1.Image1.Visible = False

End Sub

代码截图:

通过监听,触发事件

8 监听后,事件触发的代码解读及运行结果

代码讲解:

1) 在这个过程中我们要首先将objPigsy的AgeA属性加上1,表示年龄增加了一岁。

2) 将UserForm1.Label1.Caption的显示更新为Time & ",是俺" & objPigsy.Name & "的" & inAge & "岁生秒",注意这里改成了"岁生秒",如果你可以有足够的耐心用大师兄的实际年龄来取值,不妨可以按年来触发这个事件。

3) 弹出一个对话框 "俺" & objPigsy.Name & inAge & "岁生秒了",大家要注意这个弹出对话框的显示是可以自动消失的,为什么要自动消失呢,以免影响我们的二师兄过生日呢。自动消失的时间是5秒钟。

如何做到自动消失呢?详细的讲解大家可以参考《VBA代码解决方案》的相关内容。这里利用了一个MsgBoxTimeOut API 函数,所以我们要在标准模块的头部加上下面的代码:

#If VBA7 Then

Public Declare PtrSafe Function MsgBoxTimeOut Lib "user32" Alias _

"MessageBoxTimeoutA" (ByVal hwnd As LongPtr, ByVal lpText As _

String, ByVal lpCaption As String, ByVal wType As Long, ByVal _

wlange As Long, ByVal dwTimeout As Long) As Long

#Else

Public Declare Function MsgBoxTimeOut Lib "user32" Alias _

"MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As _

String, ByVal lpCaption As String, ByVal wType As Long, ByVal _

wlange As Long, ByVal dwTimeout As Long) As Long

#End If

截图如下:

通过监听,触发事件

4) 上面的工作结束后我们就让二师兄过生日的专用图片消失:

UserForm1.Image1.Visible = False

好了,到这里我们就把整个代码的过程大体上讲了一遍,还有一些小的细节没有讲到,大家可以参考我的测试程序文件自己理解,这一讲是二师兄成长系列的结束篇,大家可以从中看到类的实际代码,整个过程对于大家理解类的知识是非常有帮助的。

下面我们简单地看看代码的执行过程:

通过监听,触发事件

我在5秒钟内做了一个视频的截图,大家看看,还是很好玩的:

通过监听,触发事件

看看我们的二师兄,憨态可掬的样子,也是我们写出这讲代码的一个回报吧。当然,理论掌握后要用到实际中,本书的内容虽然实例较多,但这些实例大部分是为了让大家更好地接受理论。

今日内容回向:

1 自定义事件中传入参数的意义是什么?

2 如何做到提示框自动消失?

3 “监听的目的是为了实现自定义事件的响应”,如何理解这句话呢?

备注:本讲的代码的测试程序为VBA-CLASS(43-46).xlsm

通过监听,触发事件

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

通过监听,触发事件

通过监听,触发事件

通过监听,触发事件

【分享成果,随喜正能量】天地无终极,人命若朝霞。生命,是我们唯一且珍贵的财富,当你选择放弃的时候,一切都没有了意义!。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章