发信人: pack27()
整理人: gzwsh(2001-05-12 22:56:12), 站内信件
|
第五天 有实际意义的类
在我的前面的贴子中,建立了一个cDeveloper类,这个类在我们的实际编程应用中是没有什么意义的。这次,我们来建立一个有实际意义的类。
首先,我们来看一个程序片断。
程序片断的功能:读取当前Windows登录用户和计算机名。
程序片断的运行环境:Windows9x/NT/2000,局域网环境。
程序内容:1、一个窗体Form1,窗体上一个CommandButton控件Command1,代码如下:
Option Explicit
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Const MAX_COMPUTERNAME_LENGTH& = 15
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Sub Command1_Click()
Dim lngReturn As Long
Dim lngSize As Long
Dim sBuffer As String
Dim lSize As Long
Dim strUserName As String
Dim strComputerName As String
'1.取得计算机名
strComputerName = String$(MAX_COMPUTERNAME_LENGTH + 1, 0)
lngSize = MAX_COMPUTERNAME_LENGTH + 1
lngReturn = GetComputerName(strComputerName, lngSize)
'2.取得Windows当前登录用户名
sBuffer = Space$(255)
lSize = Len(sBuffer)
Call GetUserName(sBuffer, lSize)
If lSize > 0 Then
strUserName = CStr(Trim(Left$(sBuffer, lSize - 1)))
Else
strUserName = vbNullString
End If
MsgBox "当前用户为:" & strUserName & " ;计算机名为:" & strComputerName
End Sub
您可以看到,在这个程序中调用了两个API函数。虽然这个程序并不复杂,功能也很简单,但如果您每次要调用这个功能时,都要写这段代码,您一定还是会觉得很烦,而且API的声明调用也不是一个让一般的VB编程人员搞得很清楚的事。于是,我们可以把它封装成类,在要用到这个类的程序中,只要添加这个已经建好的类就可以了。下面是这个类的代码:(我想不出这个类的一个更好的名字,所以命名为cUser)
Option Explicit
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Const MAX_COMPUTERNAME_LENGTH& = 15
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private mvarComputerName As String
Public Property Get ComputerName() As String
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.ComputerName
Dim s$
Dim dl&
Dim sz&
If mvarComputerName = "" Then
s$ = String$(MAX_COMPUTERNAME_LENGTH + 1, 0)
sz& = MAX_COMPUTERNAME_LENGTH + 1
dl& = GetComputerName(s$, sz)
mvarComputerName = s
ComputerName = mvarComputerName
End If
End Property
'通过API,取得windows系统登录用户ID
Public Function GetTheUserName() As String
Dim sBuffer As String
Dim lSize As Long
sBuffer = Space$(255)
lSize = Len(sBuffer)
Call GetUserName(sBuffer, lSize)
If lSize > 0 Then
GetTheUserName = CStr(Trim(Left$(sBuffer, lSize - 1)))
Else
GetTheUserName = vbNullString
End If
End Function
我们可以看到,这个类有一个属性ComputerName和一个方法GetTheUserName。我把它们定义为属性或方法是为了演示需要,只要您愿意,您完全可以把它们全定义为属性或全定义为方法。
还有,请您注意:Public Property Get ComputerName() As String 这一句。它没有Public Property Let ComputerName () As String 一句与之匹配。这就是我曾说过的只读属性,当一个属性只有Property Get语句时,它是只读属性,当一个属性只有Property Let语句时,它是只写属性(这种属性很少见)。
这个类没有事件,不过这没关系,以后的贴子中,我会例举有事件的类。
下面,是对这个cUser类的调用。
Private Sub Command1_Click()
Dim myUser As New cUser
MsgBox "当前用户为:" & myUser.GetTheUserName & " ;计算机名为:" & myUser.ComputerName
Set myUser = Nothing
End Sub
我们可以看到,在Command1的Click事件中添加这样简单的一段代码就行了。
这个类被保存后,您可以在任何VB程序中添加并调用它,就象添加一个已经存在的窗体一样,而不用去考虑它里面的每行代码的涵义。您还可以在这个类里面封装更多的您常要用到API函数,这样,可以很大程度上简化您以后的工作。现在您是不是开始知道类的好处了?
下次,我将和您一起建立一个有数据库操作功能的类。
(未完待续)
---- ......
不想想起偏更记起
假装开心心更悲
辗转翻侧因为你起
愿你不是你
......
可捒选不恋上你么
可捒选不想你么
种种捒选可以许多
若我不是我
...... |
|