-
VB6.0
中用户类和数据源类的设计和使用技术
一、
绪论
Visual
Basic
6.0
是面向对象的编程
语言,允许开发人员设计自定义类。用户自定义类(
Class
)是
VB
6.0
中实现软件重用的最
基本方法,也是设计和使用
Active X
EXE/DLL
部件的技术基础。在
VB 6.0
中可以用手工的
方式直接设计类,
也可用类设计器设
计类,
而且,
VB
6.0
提供了类向导(如数据源类向导,复杂数据源类向导)
供快速设计复杂类。
本文基本上以笔者设计的通讯电源电压监控为例介绍定义和使用类
(特别是类的自定义事
件)
的方法
(
包括属性、
方法、
自定义事件)
,并将
讨论包含两个外部数据成员的数据源类的定义、
使用技术。
二、自定义类的设计和使用
2.1
自定义类的设计
手工设计自定义类分以下四步:
第一步、设计类的属性或属性过程(
Property
)
在
VB
6.0
中有两种类型的属性,即用向类模块中添加
Public
变量
的方法定义的一般属性,和用向类模块中
添加
Property
GET/LET/SET
过程的方法定义的属性过程,
一般使用属性过程。
属性过程分只读
(
Property
GET
)
< br>、
只写(
Property
L
ET/SET
)、读写(
Property
< br>GET
和
LET/SET
)属性
过程三种,
SET
用于定义对象类型属性过程,
而
LET
用于定义非对象类型属性过程。
GET/LET/SET
的含义是:当读取
/
使用(即
Access
存取)该属性值时,执
行
Property
Get
中的代码;当写入
/
修改(即
< br>Assign
指派)该属性值时,执行
Property
Let
或
Set
中的代码。因
为在存取或指派属性值时能执行一段代码,我们就可以在属性过程中增加
许多代码(如检验代码),这正是属
性过程的优点。
例如:下面代码定义了两个属性
CurVolume
< br>和
PreviousVolume
Option
Explicit
Public PreviousVolume As
Integer
'
定义了属性
PreviousVolume
'
下述代码定义属性过程
CurVolume
Dim mVolume As Integer
'
为属性
CurVolume
定义临时
存贮区
Public Property Get
CurVolume() As Integer
'
读属性
CurVolume
CurVolume = mVolume
End Property
Public Property Let CurVolume(ByVal
vNewValue As Integer)
'
写属性
CurVolume
If vNewValue < 0 Then
MsgBox
(
电压值为负,无法写入!
Else
mVolume = vNewValue
End If
End Property
关于属性过程有几点说明:
读写属性过程的
Property
G
ET
名称和
LET/SET
名称必须相
同,且
Property
GET
的参
数个数比
LET/SET
的参数
个数少
一个,但
Property GET
的类型和
< br>LET/SET
的最后一个参数的类型相同。例如:下例定义了一个数组属性
p>
mintNa(0 TO 99)
Option
Explicit
Private mintN As Integer
Private mintNa(100) As String
Public Property Get NumberOfTeeth
(ByVal Newvalue As Integer) As String
NumberOfTeeth = mintNa(Newvalue)
End Property
Public Property
Let NumberOfTeeth(ByVal Newvalue As
Integer, ByVal x As String)
mintNa(Newvalue) = x
End Property
由于窗体为类,故可以为窗体添加属性过程。
属性过程的作用域有三种:
Private
:本类模块中有效
Public
:本类模块和其他模块中均有效
Friend
:主要用于
Active X
部件设计。对本工程中而言,相当于
Public
;对其他
工程
/
应用而言,相当于
Privat
e
第二步、设计类的方法(
Method
)
向类模块中添加
Sub
或
Function
过程即可。例如:下例定义了一个公用方法
Public Sub VolumeCheck()
If CurVolume < 200 Or CurVolume > 240 Then
MsgBox
(
引发事件
VolumeWarn
RaiseEvent VolumeWarn
End If
End Sub
第三步、设计类的
事件(
Event
)
在
VB6
中,设计和使用类模块中的自定义事件很特殊,不易理解。具体而言,向类模块中添加自定义事件
< p>有三步:
(
p>
1
)在类模块的声明部分,用
Public
Event
定义一个事件,事件可以有参数。例如,下例定义了两个事
件:
Option Explicit
Public Event VolumeWarn()
Public Event PercentDone(ByVal pERcent
As Integer, ByRef Cancel As Boolean)
(
2
)在该类模块的某一个模块中,用
Raise Event
引发该事件。例如,公用模块
VolumeCheck
引发事件
Volume
Warn
(如果属性
CurVolume
之值在
200~240V
范围之外则引发该事件):
Public Sub VolumeCheck()
If CurVolume < 200 Or CurVolume >
240 Then
MsgBox
(
引发事件
VolumeWarn
RaiseEvent VolumeWarn
End If
End Sub
如果该事
件被引发,那么将执行为该事件编写的事件代码。问题是:事件代码在哪儿编写?不是在该类
模块中编写,而是在事件源(引发该事件的对象)中编写,在事件源的声明部分用
W
ITHEVENT
声明该类。
(<
/p>
3
)在事件源中编写事件代码。例如,在项目中的
Test
窗体中引发该事件
(
即
Test
为事件源
)
,那么:
首先在<
/p>
Test
窗体的声明部分用
WITHEV
ENT
声明该类(
Private WithEvents
xVolume As ClsVolumeCheck
),
代
码编辑窗口的左边将出现该
WITHEVENT
变量
xVolume
然后在代码编辑窗口
的左边选择
WITHEVENT
变量,在右边选择
VolumeWarn
模块,于是产生一个空模块(如
下图):
在右边的
p>
VolumeWarn
模块中为该事件编写的事件代码:
Private Sub xVolume_VolumeWarn()
MsgBox (
电压不正常!
处理电压代码
'
..............
End Sub
<
/p>
从上可以发现,不同的事件源所编写的自定义事件代码可以不相同。如何使用事件将在后面
讲述。
第四步、编写类的
Initalize
和
Termina
te
事件代码
为该类编写初始化和中断事件。
2.2
自定义类的使用
使用自定义类分四步:
第一步、在适当的模块中(如通用)声明类变量。若类中
有自定义事件,则使用用
WITHEVENT
声明该类,并
p>
为自定义事件编写事件代码(如前述的设计类的事件的第(
3
)步)。例如:
Private
WithEvents xVolume As ClsVolumeCheck
Private yVolume As
cls
多态接口
Private zVolume As
cls
抽象类
第二步、在适当的模块中(如
Form_Load
模块
)对类变量赋值。例如:
Private Sub
Form_Load()
Set xVolume = New
ClsVolumeCheck
End Sub
p>
第三步、在适当的模块中(如
Form_Load
< br>模块)使用类的
Public
或
Friend
属性、方法。例如:
Private Sub Command1_Click()
ume =
'
对<
/p>
xVolume
的
CurVolume<
/p>
属性赋值
Call Check
'
调用
xVolume
的
VolumeCheck
过程
End Sub
由于
ClsVolumeCheck
类中的
VolumeCheck
过程中有
RaiseEvent
VolumeWarn
语句,故
Call
Check
时可能引发事件
VolumeWarn
。当
200
>
>2
40
时
,
将引发事件
< br>VolumeWarn
,并执
行在本窗体中为该类编写的
事件代码:
Private Sub
xVolume_VolumeWarn()
MsgBox
(
电压不正常!
'
处理电压代码
End Sub
第四步、释放类对象变量。这一点非常重要,当不用类对
象变量时一定要释放它,以释放内存资源。例如:
Private Sub Form_QueryUnload(Cancel As
Integer,
UnloadMode As Integer)
Set xVolume = Nothing
End
Sub
三、数据源类的设计与使用
数据源类是一个从外部源获取数据的类,
这些数据将被其他对象所使用的,
数据识别类不是必须有可视的
外在表示,也不局限于某个特定的数据接口(如
DAO
或者
RDO)
。数据识别类可以作为任何类型数据的数据源
,
包括传统的
ODBC
源、
ActiveX Data Objects
(ADO)
,或者任何
OLE DB
提供程序。
3.1
创建步骤
第一步、增加一个新类,设置类的
DataSourceBehavior
属性为
vbDa
taSource
,则类就可以作为其他对象
的数据源;增加<
/p>
ActiveX Data Objects 2.0
Library
的引用。
第二步、设计数据源类的
Initialize
事件代码、
GetDataMember
过程模块;<
/p>
第三步、为数据源类设计一
些
Public
方法。
例如下面的代码定义了一个包含两个外部数据成员的数据源类:
Option Explicit
Public Event
MoveComplete()
'
公共事件
Dim WithEvents adoEmployeesRS As
Recordset
'
第一个外部数据成员
Dim
WithEvents adoVolumeRS As Recordset
'
第二个外部数据成员
Private Sub Class_Initialize()
'
类的初始化事件
Dim db As Connection
Set
db = New Connection
Location =
adUseClient
Data
Source=C:Program FilesMicrosoft
Visual
;
'
创建一个具体的
ADO
连接
Set
adoEmployeesRS = New Recordset
adLockOptimistic
'
创建第一个具体的外部源所对应的
ADO Records
et
(
adoEmployeesRS
)
Set
adoVolumeRS = New Recordset
Customers
-
-
-
-
-
-
-
-
-
上一篇:FBWF 控制台实用指南
下一篇:水生植物(图片及介绍)