關于VisualBasic6.0類開發(下)
在Visual Basic 6.0類的技術與應用(上)(以下簡稱上文)中,我們討論了類的理論、類的創建和類的方法的編程實踐,實際上,類之所以能夠在軟件工程中廣泛應用,最主要的一點是它可以非常方便的封裝許多編程需要的屬性,這不僅使程序員在一定程度上克服控件(ocx)和鏈接庫(dll)設計和調試中的復雜性,而且能夠提高程序代碼的簡潔和高效性——本文將討論完整的類的編程,包括方法、屬性和基本事件。
(一)類的屬性的特征和定義;
類似于標準控件的屬性,類的屬性允許用戶在指定的數據范圍內進行賦值,這些值被類內的各個代碼部分所共享。屬性的獲得和傳遞需要經過 Property Let和Property Get語句進行編程,當然,我們首先需要在類中進行全局或者模塊級的相應變量定義。
(二)事件的屬性和基本定義;
和窗體的事件類似,類也有兩個基本的事件,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 As sTYLE)
'獲得屬性的被賦的值
mvarBiaozhi = vData
End Property
Public Property Get Biaozhi() As sTYLE
'傳遞屬性值到類中
Set Biaozhi = mvarBiaozhi
End Property
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
Private Sub Command1_Click()
'當命令按鈕按下時激活類
myT.Attach Text1
'方法參數聯接
Select Case Combo1.ListIndex
Case 0
myT.Biaozhi = Lbigit
Case 1
myT.Biaozhi = Lcaseit
Case 2
myT.Biaozhi = Nlogoit
End Select
'根據列表框的選擇,給類的Biaozhi屬性賦值
'注意,在編程環境中,上述屬性值自動添加
Text1.Text = myT.dONE
'返回排序結束后的字符串
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set myT = Nothing
End
'良好的編程習慣
End Sub
怎么樣,我們的代碼看起來如此的簡潔,這種感覺就象是在使用一個控件,不僅可以隨心所欲的調用,而且方便的使用了vb的自動提示功能。
(五)關于類的編程技術的總結;
嚴格的說,類是vb編程中的一個相當有用的技術,同樣也是學習和掌握中的難點,類在大型軟件工程中應用是非常廣泛和卓有成效的,但是,在小型軟件開發中,為了提高軟件的效率和代碼的清晰度,應該避免使用較多的類模塊,控件和聯接庫,取代以標準模塊。
本文所示例的代碼比較簡單,卻覆蓋了關于模塊編程技術的方方面面,希望初學者能夠有所借鑒,也希望程序員能夠共同探討。我們應該相信,無論多么復雜的高樓大廈都是由普普通通的方磚堆砌而成的,同樣,無論所么復雜的軟件工程都是由基本的程序語句所構成的,編程愛好者、程序員和分析員的區別只是在于,用同樣的程序語句構建的程序的不同而已。