ocx)、链接库( Active
dll) 和类( Class
moudle) 构 因此掌握类的理
中,模块( Moudle) 、控件( Active 论和编程方法是非常有意义的。 (一)类的基本定义和应用概述;
成了系统化、 高效化的软件工程, 而类的技术是控件和链接库技术的基础,
类是包含了方法、属性、数据成员的高级代码模块, 没有图形界面的 Active 注意的是,类是不能继承的。
它既在模块的范畴之内, 又是一个
ocx,程序员可以象使用控件一样使用它,但却不能看到它,值得
对象的动作就是类的
类能够使我们高效的完成对某一个或者某几个特定的对象的复杂操作,
方法,对象的属性就是类的属性过程。相对而言,如果编程的对象是一组事物,那么,我们 采用标准模块的方式是非常合适的,在下列两种情况下,应该使用类进行代码处理:
(1)创建大量性质相近的对象; (2)提高代码的封装性。
类的创建非常简单,在进行代码编写的时候,在 就可以添加一个空白的类。
类文件一般以 .cls 作为扩展名保存。 (二)类的方法的实现;
类的方法类似于动态链接库的接口函数,
它能够接受其他窗体代码的指定类型参数,
并 public
“工程 ”菜单中选择 “添加类模块 ”项目,
且传递到类中。一般来说类的方法是能够指定是否有返回值的。它在类中通常是一个 过程。请看下面的代码示例,它使一个密码框拒绝非字母的输入:
(1)类 cls 的代码; Option Private
Explicit ' 变量检查 WithEvents
mytxt
As
TextBox
'本类中的方法接受和控制一个 Dim
isNUM
As
Boolean
text 密码框
'类的模块级变量 Public
Sub
Attach(itTEXT
As
TextBox)
'接受外部变量到 mytxt 中
Set End
mytxt Sub Sub =
= itTEXT
Private isNUM
mytxt_KeyUp(KeyCode (KeyCode
> =
65)
As And
Integer, (KeyCode
Shift <=
As 90)
Integer)
'测试密码框的键盘输入是否是英文字母 If
isNUM Beep mytxt.Text
=
\" \" =
False
Then
'如果输入不是英文字母则响铃并且清空密码框内容 MsgBox End
If
mytxt.Text
\" 非法字符输入! \"
Debug.Print
'调试输出密码框内容 End
Sub
'类的代码结束
(2)类的引用;
已经编写完成的类可以经过两种格式进行引用,第一种方式: dim)
myCLS (指定的类名)
myCLS mycls
=
As New
As
New
Private (public 或者
cls(编写完成的类名) ;第二种方式较多用于
程 序 编 写 风 格 较 “老 ”的 程 序 员 : 首 先 在 窗 体 代 码 中 进 行 模 块 级 声 明 ── Dim ── Set
cls, 然 后 在 具 体 代 码 过 程 中 进 行 具 体 定 义 cls。这两种方式的效率和代码的简洁性方面可能会有所差
Set
myCLS
=
Nothing 来取消
别,但在笔者的编程实践中,并没有什么特别的感觉,不过我较多使用第一种方式,因为它 书写起来更加方便。另外,在代码结束的时候,使用 类的资源占用是一种非常好的编程习惯。
在窗体 form1 中(窗体有一个密码框控件 Option
Explicit
text1,passworldchar= \"* \") 添加以下代码:
Private myCLS As New cls
'引用 cls Private
Sub
Form_Load() Text1
myCLS.Attach '启动类 End
Sub
'在代码结束时记得释放资源 Private Set End End
Sub
(尽管它和类的事件非常相似
),它 ──
Sub myCLS
Form_Unload(Cancel =
Nothing
As
Integer)
本文代码展示了类的方法的代码编写过程和调用方式 在一定程度上保护密码。 类的方法可以不需要任何参数,
的效果是,如果密码框中被输入了非字母,则系统振铃,并删除密码框中的原来的数据
这一点类似一个 public 的函数或者过程, 它也是类中使用最
.
广泛的。在下一篇文章中我将讨论,如何使用类的属性、事件和方法进行综合编程
在 Visual Basic 6.0 类的技术与应用(上) (以下简称上文)中,我们讨论了类的理论、
实际上, 类之所以能够在软件工程中广泛应用,
最主要的
──
这不仅使程序员在一定程度上克服控件
类的创建和类的方法的编程实践,
一点是它可以非常方便的封装许多编程需要的属性,
(ocx)和链接库( dll)设计和调试中的复杂性,而且能够提高程序代码的简洁和高效性 本文将讨论完整的类的编程,包括方法、属性和基本事件。
(一)类的属性的特征和定义;
类似于标准控件的属性, 类的属性允许用户在指定的数据范围内进行赋值, 内的各个代码部分所共享。属性的获得和传递需要经过
Property
语句进行编程,当然,我们首先需要在类中进行全局或者模块级的相应变量定义。
(二)事件的属性和基本定义;
这些值被类
Get
Let 和 Property
和窗体的事件类似,类也有两个基本的事件, 这两个事件 ──只要你记得完善类的方法和属性。
Class_Initialize (类加载时触发)和
Class_Terminate(类卸载时触发) ,这两个事件都是 private 的。实际上,我们完全可以忽略
类同样可以定义自己的事件,它和方法的程序编写格式类似,只不过需要
关键字进行参数声明 ,而且事件不能有任何命名参数或者可选参数,它也没有返回值。
WithEvents
实际上,结构良好的方法和属性完全可以替代结构复杂的类的事件。 (三)类的方法、事件和属性的编程实例;
本程序的设计目的是, 通过类控制窗体中文本框的内容的全部大写、 化。
为了方便代码的书写和调用,我在类中引用了枚举的编程方法。 以下代码在类 Class1: Option Explicit Private
WithEvents
myTXT
As
TextBox
'方法的参数接口 Public
Enum
sTYLE
Lcaseit '小写属性 Lbigit ' 大写属性 Nlogoit ' 逆向排序属性 End
Enum
'自定义枚举,用来实现属性的自动赋值 Private
mvarBiaozhi
As
sTYLE
'实现枚举常量的连接 Public
Function
dONE()
As
String '
'DONE 方法用来根据指定的枚举属性,对
小写和逆向排序转
'窗体文本框进行相应的字符转化操作 '并且返回转化后的字符串 If
mvarBiaozhi =
Nlogoit
Then
dONE
=
StrReverse(myTXT)
'逆向排序 ElseIf
mvarBiaozhi =
Lcaseit
Then
dONE =
LCase(myTXT)
'强制小写转化 Else dONE
=
UCase(myTXT)
'强制大写转化 End If End
Function
'DONE 方法结束 Public
Property
Let
Biaozhi(ByVal
vData
'获得属性的被赋的值 mvarBiaozhi =
vData
End Property Public
Property
Get
Biaozhi()
As
sTYLE
'传递属性值到类中 Set Biaozhi =
mvarBiaozhi
End
Property
As
sTYLE)
Public Sub Attach(itTEXT As TextBox)
'连接类的方法 Set myTXT =
itTEXT
End
Sub Private
Sub
Class_Initialize() '本事件在类倍加载时激活 MsgBox \"你好!本程序向您展示使用类的方法、属性、事件进行编程的技术!End
Sub Private
Sub
Class_Terminate()
'本事件在类被卸载时激活 MsgBox \"你好!记得在 Class_Terminate 中填写对象撤销后的代码!
\"
End
Sub
'类的代码全部结束 (四)窗体代码的引用编程;
在窗体 FORM1 中添加文本控件
TEXT1 、下拉列表控件
COMBO1 、命令按钮COMMAND1 (CAPTION= \" 开始转化 \"),调整三个控件到适当位置。
Dim
myT
As
New
Class1
'类的引用 Private
Sub
Form_Load()
Combo1.Clear Combo1.AddItem \"字符串大写转化 \" Combo1.AddItem
\"字符串小写转化 \"
\"
Combo1.AddItem Combo1.ListIndex
\"字符串逆向排序 \" =
0
'在列表框中添加属性选项 End
Sub Sub
Command1_Click()
Private
'当命令按钮按下时激活类 myT.Attach
Text1
'方法参数联接 Select
Case Combo1.ListIndex
Case 0
myT.Biaozhi Case 1
myT.Biaozhi Case 2
myT.Biaozhi
End
Select
Biaozhi 属性赋值
=
Nlogoit =
Lcaseit =
Lbigit
'根据列表框的选择,给类的
'注意,在编程环境中,上述属性值自动添加 Text1.Text
=
myT.dONE
'返回排序结束后的字符串 End
Sub Sub
Form_Unload(Cancel
As
Integer)
Private
Set End
myT = Nothing
'良好的编程习惯 End
Sub
这种感觉就象是在使用一个控件,
不仅可以随心所
怎么样, 我们的代码看起来如此的简洁, 欲的调用,而且方便的使用了
vb 的自动提示功能。 (要自动提示,可以进行枚举)
因篇幅问题不能全部显示,请点此查看更多更全内容