精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VB和Basic>>〓〓..技术文章连载..〓〓>>跟我学用VB的类(系列)>>(转)跟我学用VB的类(系列)之第五天

主题:(转)跟我学用VB的类(系列)之第五天
发信人: 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函数,这样,可以很大程度上简化您以后的工作。现在您是不是开始知道类的好处了? 
    下次,我将和您一起建立一个有数据库操作功能的类。 

(未完待续) 



----
......
不想想起偏更记起
假装开心心更悲
辗转翻侧因为你起
愿你不是你
......
可捒选不恋上你么
可捒选不想你么
种种捒选可以许多
若我不是我
...... 

[关闭][返回]