码迷,mamicode.com
首页 > 编程语言 > 详细

VBA中使用类和事件的注册

时间:2016-05-23 21:22:47      阅读:1392      评论:0      收藏:0      [点我收藏+]

标签:

想了解一下VBA中自定义类和事件,以及注册事件处理程序的方法。

折腾了大半天,觉得这样的方式实在称不上“注册”,所以加一个“伪”字。纯粹是瞎试,原理也还没有摸透。先留着,有时间再接着摸。

做以下尝试:

1、建一个自定义类(类模块),类名:Qiqiu

    该类提供一个Daqi的方法,每执行一次,x(记录气球的体积)的值+1,如果x的值大于max,则触发自定义的Change事件。

    为节省细节不使用属性过程,变量直接用public

 1 Public Event Change(q As qiqiu)   Event关键字声明事件,准备推模式,事件参数使用Qiqiu类型 
 2 Public x As Integer               记录最大体积
 3 Public max As Integer             记录实际体积
 4 Function Daqi(i As Integer)       模拟给Qiqiu打气的情形
 5      x = x + i
 6     If x > max Then
 7        RaiseEvent Change(Me)       RaiseEvent关键字触发事件。本例使用推模式,在事件触发时,把自已的实例推给订阅者。
 8        x = 0
 9     End If
10 End Function

2、建三个简单窗体MainFrm,UserFrm1,UserFrm2

    MainFrm启动后,点击“弹出窗体按钮”,UserFrm1和UserFrm2显示出来

    技术分享技术分享技术分享

3、UserFrm1、UserFrm2需要关联Qiqiu的Change事件,需要做一些准备

    下面是UserFrm1中的代码(UserFrm2的代码和UserFrm1完全相同,简化案例)

    注意第一行的WithEvents关键字的变量声明,后面需要使用这个变量将方法(事件处理程序)关联到事件。

1 Public WithEvents qiu As Qiqiu          关联Qiqiu的事件的关键
2 
3 Private Sub qiu_Change(q As Qiqiu)
4     Me.TextBox1 = "气球爆炸了,爆炸时体积是:" + CStr(q.x)
5 End Sub

4、MainFrm主窗体代码:

 1 Public q As Qiqiu 
 3 Private Sub UserForm_Initialize()
 4     Set q = New Qiqiu                      窗体初始化,初始化Qiqiu类的实例
 5     q.max = 10                             ‘将q的最大体积设定为10
 6 End Sub
 8 
 9 Private Sub btn_Click()              点击按钮“弹出窗体”执行的代码,实例化UserFrm1和UserFrm2并显示 
11 Dim f1 As UserFrm1, f2 As UserFrm2
13   Set f1 = New UserFrm1
14   Set f2 = New UserFrm2
16   Set f1.qiu = q        第3中的WithEvents关键字声名的变量在此处使用
17   Set f2.qiu = q        使f1.qiu,f2.qiu分别指向Qiqiu类的实例q
19     f1.Show False
20     f2.Show False
22 End Sub
23 
24 Private Sub btndq_Click()          点击按钮“打气”执行的代码   
26      q.daqi (5)                    调用q的打气方法给Qiqiu打气,当q.x大于q.max时触发事件  
28 End Sub

 5、程序执行效果:(虽然实现了效果,但理解上感觉模模糊糊)

      打气三次时触发事件,事件关联的处理程序提示,气球爆炸,并获取爆炸时的体积

     技术分享

VBA中使用类和事件的注册

标签:

原文地址:http://www.cnblogs.com/zzstone/p/5521296.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!