精华区 [关闭][返回]

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

主题:(转)跟我学用VB的类(系列)之第四天
发信人: pack27()
整理人: gzwsh(2001-05-12 22:56:12), 站内信件
第四天、建立能做点事的类 

    下面是我们在《第二天》里建立的cDeveloper类的代码框架,我将在这段代码里直接加上一些新的代码,让它能做一点事件。请注意比较下面的代码与《第二天》中的代码有什么不同。 

Option Explicit 

'local variable(s) to hold property value(s) 
Private mvarDeveloperName As String 'local copy 
Private mvarEmpolderTool As String 'local copy 
'To fire this event, use RaiseEvent with the following syntax: 
'RaiseEvent EmpolderLost[(arg1, arg2, ... , argn)] 
Public Event EmpolderLost() 
'To fire this event, use RaiseEvent with the following syntax: 
'RaiseEvent EmpolderSucceed[(arg1, arg2, ... , argn)] 
Public Event EmpolderSucceed() 
Public Sub Empolder() 
    Dim intSucceed As Integer    'Msgbox返回的是Integer变量,所以这里定义为Integer变量,您当然也可以定义它为Long,因为Long的存储空间大于Integer. 
    MsgBox "现在进行开发" 
    intSucceed = MsgBox("开发成功了吗?", vbYesNo + vbQuestion + vbDefaultButton2, "问题") 
    If intSucceed = vbYes Then   'vbYes是一个VB常量,它的值是一个Integer型的数据. 
        RaiseEvent EmpolderSucceed  '如果开发成功,则激发EmpolderSucceed事件 
    Else 
        RaiseEvent EmpolderLost     '如果没有开发成功,则激发EmpolderLost事件 
    End If 
End Sub 

Public Sub Study() 
    MsgBox mvarDeveloperName & ":请您进一步学习您的" & mvarEmpolderTool & "开发工具", vbInformation, "注意" 
    '在这里,您看到了对mvarDeveloperName和mvarEmpolderTool的调用, 
    '因为这是从类的内部调用DeveloperName属性和EmpolderTool属性,所以可以直接访问存储这两个属性的 
    '模块内部变量mvarDeveloperName和mvarEmpolderTool. 
End Sub 

Public Property Let EmpolderTool(ByVal vData As String) 
'used when assigning a value to the property, on the left side of an assignment. 
'Syntax: X.EmpolderTool = 5 
    mvarEmpolderTool = vData 
End Property 

Public Property Get EmpolderTool() As String 
'used when retrieving value of a property, on the right side of an assignment. 
'Syntax: Debug.Print X.EmpolderTool 
    EmpolderTool = mvarEmpolderTool 
End Property 

Public Property Let DeveloperName(ByVal vData As String) 
'used when assigning a value to the property, on the left side of an assignment. 
'Syntax: X.DeveloperName = 5 
    mvarDeveloperName = vData 
End Property 

Public Property Get DeveloperName() As String 
'used when retrieving value of a property, on the right side of an assignment. 
'Syntax: Debug.Print X.DeveloperName 
    DeveloperName = mvarDeveloperName 
End Property 

    然后我们可以在工程中添加一个新窗体,这个窗体为启动窗体,在这个窗体上画一个名为Command1的按钮,用来测试我们的类。把下面的代码COPY到这个窗体的代码窗口中。 
Option Explicit 
Private WithEvents MyDeveloper As cDeveloper 
Private Sub Command1_Click() 
    
    With MyDeveloper 
        .DeveloperName = "黄河" 
        .EmpolderTool = "C++" 
        .Empolder 
    End With 
    
End Sub 

Private Sub Form_Load() 
    Set MyDeveloper = New cDeveloper 
End Sub 

Private Sub Form_Unload(Cancel As Integer) 
    Set MyDeveloper = Nothing 
End Sub 

Private Sub MyDeveloper_EmpolderLost() 
    With MyDeveloper 
        .Study 
    End With 
End Sub 

Private Sub MyDeveloper_EmpolderSucceed() 
    With MyDeveloper 
        MsgBox .DeveloperName & ":您已经用您的" & .EmpolderTool & "工具成功完成了您的开发工作" 
    End With 
End Sub 

    您最好是照着这段代码自己录入到窗体中,这样您可以有更直接的理解。 
    比如,在这个窗体的代码窗口上方的对象下拉列表中,您可以看到MyDeveloper这一项,对它的访问方式很象一个CommandButton的实例Command1。当您在这里选中MyDeveloper时,在对象下拉列表右边的程序例表中(英文版是procedure我把它译为程序),您可以找到MyDeveloper的两个事件。这更象是一个标准的VB对象。但请注意我们在申明这个对象时,使用了WithEvents关键字,这是告诉VB,这个对象是可以接受事件的。您可以试着把WithEvents删掉,看看程序有什么变化。 
    然后我们运行这个程序,看看会发生什么事吧。您可以逐语句地调试这个程序,看看它是怎样运行的,这样您可以更好地理解它。 
    我还想说一点:您也许会说,用类编写VB程序有些么好处呀?看过了我的这几篇贴子的朋友,只要你们想一想,一定会清楚,用类编写程序,和我们以前的写程序的方式的最大的不同其实在于,我们编程的思路变了,用类编程,就是面向对象编程的最有效的方法。用以前的方式,我们的程序的每一个功能都象是由我们自己完成的(其实也是),用类编程,就好象是我们先教会一个对象所有要用到的功能,然后我们可以不去管这个对象怎样完成这些它已经学会的功能,只用考虑怎样去调用这个类。就好象一家电脑公司,以前是一切工作都是由老板一个人完成,现在新聘员工,教会他们怎样工作,然后就只用告诉这个员工要做什么工作就可以了,进一步的工作由这个员工去完成。从前面的类的例子中,我们看不出这样做的好处,但如果您的程序更大,代码更多,就如同一家大的电脑公司,培养一个甚至一批能自己完成工作的员工是很有必要的,尽管在开始培养时您会花多一点的时间,但这个过程完成后,您就会感到这样做的好处了。而且当您有了大量的自己的类库时,您以后的程序的工作量会很大程度上地减少--这该叫作人才储备吧。 
还有,一个程序中可能不只一个类,而且根据您的程序的复杂程序,可能有很多的类,而且还可能有集合类。关于集合类,在以后我们再进行讨论。 
    因为这只是一个简单的例子,所以这个类没有什么实际的作用。在下次的贴子中,我会和您一起写一个有实际作用的类。 

(未完待续) 



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

[关闭][返回]