标签:
想了解一下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、程序执行效果:(虽然实现了效果,但理解上感觉模模糊糊)
打气三次时触发事件,事件关联的处理程序提示,气球爆炸,并获取爆炸时的体积
标签:
原文地址:http://www.cnblogs.com/zzstone/p/5521296.html