程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 關於VisualBasic6.0類開發

關於VisualBasic6.0類開發

編輯:VB綜合教程
對程序員和編程愛好者來說,VB中類的技術是學習中的一個難點,在大型軟件的開發過程中,模塊(Moudle)、控件(Activeocx)、鏈接庫(Activedll)和類(Classmoudle)構成了系統化、高效化的軟件工程,而類的技術是控件和鏈接庫技術的基礎,因此掌握類的理論和編程方法是非常有意義的。
  
  (一)類的基本定義和應用概述
  
  類是包含了方法、屬性、數據成員的高級代碼模塊,它既在模塊的范疇之內,又是一個沒有圖形界面的Activeocx,程序員可以象使用控件一樣使用它,但卻不能看到它,值得注意的是,類是不能繼承的。
  類能夠使我們高效的完成對某一個或者某幾個特定的對象的復雜操作,對象的動作就是類的方法,對象的屬性就是類的屬性過程。相對而言,如果編程的對象是一組事物,那麼,我們采用標准模塊的方式是非常合適的,在下列兩種情況下,應該使用類進行代碼處理:
  
  (1)創建大量性質相近的對象;
  
  (2)提高代碼的封裝性。
  
  類的創建非常簡單,在進行代碼編寫的時候,在“工程”菜單中選擇“添加類模塊”項目,就可以添加一個空白的類。
  
  類文件一般以.cls作為擴展名保存。
  
  (二)類的方法的實現
  
  類的方法類似於動態鏈接庫的接口函數,它能夠接受其他窗體代碼的指定類型參數,並且傳遞到類中。一般來說類的方法是能夠指定是否有返回值的。它在類中通常是一個public過程。請看下面的代碼示例,它使一個密碼框拒絕非字母的輸入:
  
  (1)類cls的代碼;
  
  OptionExplicit'變量檢查
  
   PrivateWithEventsmytxtAsTextBox
  
   '本類中的方法接受和控制一個text密碼框
  
   DimisNUMAsBoolean
  
   '類的模塊級變量
  
   PublicSubAttach(itTEXTAsTextBox)
  
   '接受外部變量到mytxt中
  
   Setmytxt=itTEXT
  
  EndSub
  
  PrivateSubmytxt_KeyUp(KeyCodeAsInteger,ShiftAsInteger)
  
  isNUM=(KeyCode>=65)And(KeyCode<=90)
  
  '測試密碼框的鍵盤輸入是否是英文字母
  
  IfisNUM=FalseThen
  
   Beep
  
   mytxt.Text=""
  
   '如果輸入不是英文字母則響鈴並且清空密碼框內容
  
   MsgBox"非法字符輸入!"
  
  EndIf
  
  Debug.Printmytxt.Text
  
  '調試輸出密碼框內容
  
  EndSub
  
   '類的代碼結束
  
  (2)類的引用
  
  已經編寫完成的類可以經過兩種格式進行引用,第一種方式:Private(public或者dim)myCLS(指定的類名)AsNewcls(編寫完成的類名);第二種方式較多用於程序編寫風格較“老”的程序員:首先在窗體代碼中進行模塊級聲明――DimmyCLSAscls,然後在具體代碼過程中進行具體定義――Setmycls=Newcls。這兩種方式的效率和代碼的簡潔性方面可能會有所差別,但在筆者的編程實踐中,並沒有什麼特別的感覺,不過我較多使用第一種方式,因為它書寫起來更加方便。另外,在代碼結束的時候,使用SetmyCLS=Nothing來取消類的資源占用是一種非常好的編程習慣。
  
  在窗體form1中(窗體有一個密碼框控件text1,passworldchar="*")添加以下代碼:
  
  OptionExplicit
  
   PrivatemyCLSAsNewcls
  
   '引用cls
  
   PrivateSubForm_Load()
  
   myCLS.AttachText1
  
   '啟動類
  
  EndSub
  
  '在代碼結束時記得釋放資源
  
  PrivateSubForm_Unload(CancelAsInteger)
  
   SetmyCLS=Nothing
  
  End
  
   EndSub
  
  本文代碼展示了類的方法的代碼編寫過程和調用方式(盡管它和類的事件非常相似),它的效果是,如果密碼框中被輸入了非字母,則系統振鈴,並刪除密碼框中的原來的數據――在一定程度上保護密碼。
  類的方法可以不需要任何參數,這一點類似一個public的函數或者過程,它也是類中使用最廣泛的。在下一篇文章中我將討論,如何使用類的屬性、事件和方法進行綜合編程。

我們討論了類的理論、類的創建和類的方法的編程實踐,實際上,類之所以能夠在軟件工程中廣泛應用,最主要的一點是它可以非常方便的封裝許多編程需要的屬性,這不僅使程序員在一定程度上克服控件(ocx)和鏈接庫(dll)設計和調試中的復雜性,而且能夠提高程序代碼的簡潔和高效性――本文將討論完整的類的編程,包括方法、屬性和基本事件。
  
  (一)類的屬性的特征和定義;
  
  類似於標准控件的屬性,類的屬性允許用戶在指定的數據范圍內進行賦值,這些值被類內的各個代碼部分所共享。屬性的獲得和傳遞需要經過PropertyLet和PropertyGet語句進行編程,當然,我們首先需要在類中進行全局或者模塊級的相應變量定義。
  
  (二)事件的屬性和基本定義;
  
  和窗體的事件類似,類也有兩個基本的事件,Class_Initialize(類加載時觸發)和Class_Terminate(類卸載時觸發),這兩個事件都是private的。實際上,我們完全可以忽略這兩個事件――只要你記得完善類的方法和屬性。
  
  類同樣可以定義自己的事件,它和方法的程序編寫格式類似,只不過需要WithEvents關鍵字進行參數聲明,而且事件不能有任何命名參數或者可選參數,它也沒有返回值。
  
  實際上,結構良好的方法和屬性完全可以替代結構復雜的類的事件。
  
  (三)類的方法、事件和屬性的編程實例;
  
  本程序的設計目的是,通過類控制窗體中文本框的內容的全部大寫、小寫和逆向排序轉化。
  
  為了方便代碼的書寫和調用,我在類中引用了枚舉的編程方法。
  
  以下代碼在類Class1:
  
  OptionExplicit
  
   PrivateWithEventsmyTXTAsTextBox
  
   '方法的參數接口
  
   PublicEnumsTYLE
  
  Lcaseit'小寫屬性
  
  Lbigit'大寫屬性
  
  NLogoit'逆向排序屬性
  
   EndEnum
  
  '自定義枚舉,用來實現屬性的自動賦值
  
  PrivatemvarBiaozhiAssTYLE
  
  '實現枚舉常量的連接
  
  PublicFunctiondONE()AsString'
  
  'DONE方法用來根據指定的枚舉屬性,對
  
  '窗體文本框進行相應的字符轉化操作
  
  '並且返回轉化後的字符串
  
  IfmvarBiaozhi=NLogoitThen
  
   dONE=StrReverse(myTXT)
  
   '逆向排序
  
  ElseIfmvarBiaozhi=LcaseitThen
  
   dONE=LCase(myTXT)
  
   '強制小寫轉化
  
  Else
  
   dONE=UCase(myTXT)
  
   '強制大寫轉化
  
  EndIf
  
  EndFunction
  
  'DONE方法結束
  
  PublicPropertyLetBiaozhi(ByValvDataAssTYLE)
  
   '獲得屬性的被賦的值
  
   mvarBiaozhi=vData
  
  EndProperty
  
  PublicPropertyGetBiaozhi()AssTYLE
  
   '傳遞屬性值到類中
  
   SetBiaozhi=mvarBiaozhi
  
  EndProperty
  
  PublicSubAttach(itTEXTAsTextBox)
  
   '連接類的方法
  
   SetmyTXT=itTEXT
  
  EndSub
  
  PrivateSubClass_Initialize()
  
   '本事件在類倍加載時激活
  
   MsgBox"你好!本程序向您展示使用類的方法、屬性、事件進行編程的技術!"
  
  EndSub
  
  PrivateSubClass_Terminate()
  
   '本事件在類被卸載時激活
  
   MsgBox"你好!記得在Class_Terminate中填寫對象撤銷後的代碼!"
  
  EndSub
  
  '類的代碼全部結束
  
  (四)窗體代碼的引用編程;
  
  在窗體FORM1中添加文本控件TEXT1、下拉列表控件COMBO1、命令按鈕COMMAND1(CAPTION="開始轉化"),調整三個控件到適當位置。
  
  DimmyTAsNewClass1
  
  '類的引用
  
  PrivateSubForm_Load()
  
   Combo1.Clear
  
   Combo1.AddItem"字符串大寫轉化"
  
   Combo1.AddItem"字符串小寫轉化"
  
   Combo1.AddItem"字符串逆向排序"
  
   Combo1.ListIndex=0
  
   '在列表框中添加屬性選項
  
  EndSub
  
  PrivateSubCommand1_Click()
  
   '當命令按鈕按下時激活類
  
   myT.AttachText1
  
   '方法參數聯接
  
   SelectCaseCombo1.ListIndex
  
  Case0
  
    myT.Biaozhi=Lbigit
  
  Case1
  
    myT.Biaozhi=Lcaseit
  
  Case2
  
    myT.Biaozhi=NLogoit
  
   EndSelect
  
   '根據列表框的選擇,給類的Biaozhi屬性賦值
  
   '注意,在編程環境中,上述屬性值自動添加
  
   Text1.Text=myT.dONE
  
   '返回排序結束後的字符串
  
  EndSub
  
  PrivateSubForm_Unload(CancelAsInteger)
  
   SetmyT=Nothing
  
  End
  
  '良好的編程習慣
  
  EndSub
  
  怎麼樣,我們的代碼看起來如此的簡潔,這種感覺就象是在使用一個控件,不僅可以隨心所欲的調用,而且方便的使用了vb的自動提示功能。
  
  (五)關於類的編程技術的總結;
  
  嚴格的說,類是vb編程中的一個相當有用的技術,同樣也是學習和掌握中的難點,類在大型軟件工程中應用是非常廣泛和卓有成效的,但是,在小型軟件開發中,為了提高軟件的效率和代碼的清晰度,應該避免使用較多的類模塊,控件和聯接庫,取代以標准模塊。
  
  本文所示例的代碼比較簡單,卻覆蓋了關於模塊編程技術的方方面面,希望初學者能夠有所借鑒,也希望程序員能夠共同探討。我們應該相信,無論多麼復雜的高樓大廈都是由普普通通的方磚堆砌而成的,同樣,無論所麼復雜的軟件工程都是由基本的程序語句所構成的,編程愛好者、程序員和分析員的區別只是在於,用同樣的程序語句構建的程序的不同而已。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved