combox控件触发事件_利用类事件改变对象的属性

大家好,我们在之前的讲解中,讲到了类对象属性的赋值及读取办法,也讲了如何赋值给类对象,我们这讲的内容要通过一个实例来讲解如何利用类的事件来改变类对象的属性。

在上一讲中我们讲了给类命名事件用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赋值的过程中增加了一个判断。

代码截图:

e8e5af86fb06febd90fa3c930c83880a.png

然后在窗体中写入如下代码:

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

代码截图:

15d2953fb88fd746befd4d4f37843c9f.png

上述代码的执行过程:

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 赋值后回到赋值按钮的过程,会弹出对话框显示此时的属性值。

我们看代码运行的截图:

65199c2cbf3359e5cd0bf6321edf0107.png
1bacaba2420a4618a75e367ef54c7d7e.png

今日内容回向:

1 如何改变类的属性值?

2 改变类属性值时如何验证?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值