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