大家好,我们在之前的讲解中,讲到了类对象属性的赋值及读取办法,也讲了如何赋值给类对象,我们这讲的内容要通过一个实例来讲解如何利用类的事件来改变类对象的属性。
在上一讲中我们讲了给类命名事件用Event语句,我们要注意以下的几点理解:
1 Event总是Public的。
2 事件可以不带参数,也可以带参数,但参数不能是命名参数,可选参数或数组参数。
3 事件是能够被对象识别的动作
我们看今日的实例:在一个窗体中,我们要求显示一个类的属性,并通过一个TEXT控件的内容可以改变这个属性,在改变属性之前,要有确认的操作。
思路:为了完成上述的要求,我们首先要使用Event语句声明事件;然后,建立一窗体UserForm3,添加一个TextBox控件(名称为TextBox1),两个CommandButton控件(名称为CommandButton1和CommandButton2),CommandButton1的Caption设置为"赋值",CommandButton2的Caption设置为"显示"。在点击显示时可以在TEXT中显示此时对象的属性值。在TEXT中录入你需要的值,点击赋值,程序会提示"是否要赋值"的确认。
下面我们看代码部分:
在类模块中:我们要对事件做声明,声明一个类的change事件。如下:
Public Event Change(ByRef Cancel As Boolean)
同时看看对于myclass类模块的代码也有修正:
Option Explicit
Public Event Change(ByRef Cancel As Boolean)
Private s$
Public Property Get r() As String
r = s
End Property
Public Property Let r(ByVal c As String)
Dim mybark As Boolean
RaiseEvent Change(mybark)
If mybark Then Exit Property
s = c
End Property
Public Sub Class_Initialize() '赋初始值
s = "0008"
End Sub
以上代码中在Let赋值的过程中增加了一个判断。
代码截图:
然后在窗体中写入如下代码:
Option Explicit
Dim WithEvents myc As MyClass
Private Sub CommandButton1_Click()
myc.r = TextBox1.Text '赋值
End Sub
Private Sub CommandButton2_Click()
TextBox1.Text = myc.r
MsgBox "myc当前的值为" & myc.r '读值
End Sub
Private Sub myc_Change(Cancel As Boolean)
If MsgBox("要改变myc的值吗?", vbYesNo) = vbNo Then Cancel = True
End Sub
Private Sub UserForm_Initialize()
Set myc = New MyClass
End Sub
代码截图:
上述代码的执行过程:
1 在窗体加载的构建函数中先实例化myclsss,此处实例化的对象是myc。
2 由于类myclass在初始化的时候赋值r属性为0008,所以上述myc的初始值也为0008。
3当点击"显示"按钮,会在TEXTBOX1中显示myc当前r属性的值。同时会弹出一个对话框显示此值。
4 我们将TextBox1的值修改一个新值,点"赋值",此时将准备赋给myc的r属性新值。
5 在写入类属性时触发写入属性Property Let代码:
Public Property Let r(ByVal c As String)
Dim mybark As Boolean
RaiseEvent Change(mybark)
If mybark Then Exit Property
s = c
End Property
6 上述代码运行到RaiseEvent Change(mybark)时会执行下面的操作:
Private Sub myc_Change(Cancel As Boolean)
If MsgBox("要改变myc的值吗?", vbYesNo) = vbNo Then Cancel = True
End Sub
此时会返回值cancel 这个值传回到let写入属性过程进行判断。
7 如果上述值为true 在let中会重新赋值。
8 赋值后回到赋值按钮的过程,会弹出对话框显示此时的属性值。
我们看代码运行的截图:
今日内容回向:
1 如何改变类的属性值?
2 改变类属性值时如何验证?