久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Excel VB中的類開發(fā)

 書館之書 2012-01-12

[VBA程序開發(fā)] VB中的類開發(fā) [復(fù)制鏈接]

對程序員和編程愛好者來說,,VB中類的技術(shù)是學(xué)習(xí)中的一個(gè)難點(diǎn),在大型軟件的開發(fā)過程中,模塊(Moudle),、控件(Active
ocx),、鏈接庫(Active dll)和類(Class
moudle)構(gòu)成了系統(tǒng)化、高效化的軟件工程,,而類的技術(shù)是控件和鏈接庫技術(shù)的基礎(chǔ),,因此掌握類的理論和編程方法是非常有意義的。
(一)類的基本定義和應(yīng)用概述,;
  類是包含了方法,、屬性、數(shù)據(jù)成員的高級代碼模塊,,它既在模塊的范疇之內(nèi),,又是一個(gè)沒有圖形界面的Active
ocx,程序員可以象使用控件一樣使用它,,但卻不能看到它,,值得注意的是,類是不能繼承的,。
類能夠使我們高效的完成對某一個(gè)或者某幾個(gè)特定的對象的復(fù)雜操作,,對象的動(dòng)作就是類的方法,對象的屬性就是類的屬性過程,。相對而言,,如果編程的對象是一組事物,那么,,我們采用標(biāo)準(zhǔn)模塊的方式是非常合適的,,在下列兩種情況下,應(yīng)該使用類進(jìn)行代碼處理:
 ?。?)創(chuàng)建大量性質(zhì)相近的對象,;
  (2)提高代碼的封裝性,。
   類的創(chuàng)建非常簡單,,在進(jìn)行代碼編寫的時(shí)候,在“工程”菜單中選擇“添加類模塊”項(xiàng)目,,就可以添加一個(gè)空白的類,。
   類文件一般以.cls作為擴(kuò)展名保存。
 ?。ǘ╊惖姆椒ǖ膶?shí)現(xiàn),;
  
類的方法類似于動(dòng)態(tài)鏈接庫的接口函數(shù),它能夠接受其他窗體代碼的指定類型參數(shù),,并且傳遞到類中,。一般來說類的方法是能夠指定是否有返回值的,。它在類中通常是一個(gè)public過程。請看下面的代碼示例,,它使一個(gè)密碼框拒絕非字母的輸入:
 ?。?)類cls的代碼;
   Option Explicit'變量檢查
    Private WithEvents mytxt As TextBox
    '本類中的方法接受和控制一個(gè)text密碼框
    Dim isNUM As Boolean
    '類的模塊級變量
    Public Sub Attach(itTEXT As TextBox)
    '接受外部變量到mytxt中
    Set mytxt = itTEXT
   End Sub
   Private Sub mytxt_KeyUp(KeyCode As Integer, Shift As Integer)
    isNUM = (KeyCode > = 65) And (KeyCode < = 90)
    '測試密碼框的鍵盤輸入是否是英文字母
    If isNUM = False Then
     Beep
     mytxt.Text = ""
     '如果輸入不是英文字母則響鈴并且清空密碼框內(nèi)容
     MsgBox "非法字符輸入!"
    End If
    Debug.Print mytxt.Text
    '調(diào)試輸出密碼框內(nèi)容
    End Sub
    '類的代碼結(jié)束
  (2)類的引用,;
  已經(jīng)編寫完成的類可以經(jīng)過兩種格式進(jìn)行引用,,第一種方式:Private(public或者dim) myCLS(指定的類名) As New
cls(編寫完成的類名),;第二種方式較多用于程序編寫風(fēng)格較“老”的程序員:首先在窗體代碼中進(jìn)行模塊級聲明――Dim myCLS As
cls,然后在具體代碼過程中進(jìn)行具體定義―― Set mycls = New
cls。這兩種方式的效率和代碼的簡潔性方面可能會(huì)有所差別,但在筆者的編程實(shí)踐中,并沒有什么特別的感覺,,不過我較多使用第一種方式,因?yàn)樗鼤鴮懫饋砀臃奖?。另外,,在代碼結(jié)束的時(shí)候,使用
Set myCLS = Nothing來取消類的資源占用是一種非常好的編程習(xí)慣,。
  在窗體form1中(窗體有一個(gè)密碼框控件text1,,passworldchar="*")添加以下代碼:
  Option Explicit
   Private myCLS As New cls
   '引用cls
   Private Sub Form_Load()
   myCLS.Attach Text1
   '啟動(dòng)類
  End Sub
  '在代碼結(jié)束時(shí)記得釋放資源
  Private Sub Form_Unload(Cancel As Integer)
   Set myCLS = Nothing
  End
 End Sub
  
本文代碼展示了類的方法的代碼編寫過程和調(diào)用方式(盡管它和類的事件非常相似),它的效果是,,如果密碼框中被輸入了非字母,,則系統(tǒng)振鈴,并刪除密碼框中的原來的數(shù)據(jù)――在一定程度上保護(hù)密碼,。
類的方法可以不需要任何參數(shù),這一點(diǎn)類似一個(gè)public的函數(shù)或者過程,,它也是類中使用最廣泛的,。在下一篇文章中我將討論,如何使用類的屬性,、事件和方法進(jìn)行綜合編程,。 我們討論了類的理論、類的創(chuàng)建和類的方法的編程實(shí)踐,,實(shí)際上,,類之所以能夠在軟件工程中廣泛應(yīng)用,最主要的一點(diǎn)是它可以非常方便的封裝許多編程需要的屬性,,這不僅使程序員在一定程度上克服控件(ocx)和鏈接庫(dll)設(shè)計(jì)和調(diào)試中的復(fù)雜性,,而且能夠提高程序代碼的簡潔和高效性――本文將討論完整的類的編程,包括方法,、屬性和基本事件,。
 ?。ㄒ唬╊惖膶傩缘奶卣骱投x;
  類似于標(biāo)準(zhǔn)控件的屬性,,類的屬性允許用戶在指定的數(shù)據(jù)范圍內(nèi)進(jìn)行賦值,,這些值被類內(nèi)的各個(gè)代碼部分所共享。屬性的獲得和傳遞需要經(jīng)過
Property Let和Property Get語句進(jìn)行編程,,當(dāng)然,,我們首先需要在類中進(jìn)行全局或者模塊級的相應(yīng)變量定義。
 ?。ǘ┦录膶傩院突径x,;
  和窗體的事件類似,類也有兩個(gè)基本的事件,,Class_Initialize(類加載時(shí)觸發(fā))和Class_Terminate(類卸載時(shí)觸發(fā)),,這兩個(gè)事件都是private的。實(shí)際上,,我們完全可以忽略這兩個(gè)事件――只要你記得完善類的方法和屬性,。
  類同樣可以定義自己的事件,它和方法的程序編寫格式類似,,只不過需要WithEvents關(guān)鍵字進(jìn)行參數(shù)聲明,而且事件不能有任何命名參數(shù)或者可選參數(shù),,它也沒有返回值。
  實(shí)際上,,結(jié)構(gòu)良好的方法和屬性完全可以替代結(jié)構(gòu)復(fù)雜的類的事件,。
  (三)類的方法,、事件和屬性的編程實(shí)例,;
  本程序的設(shè)計(jì)目的是,通過類控制窗體中文本框的內(nèi)容的全部大寫,、小寫和逆向排序轉(zhuǎn)化,。
  為了方便代碼的書寫和調(diào)用,我在類中引用了枚舉的編程方法,。
  以下代碼在類Class1:
  Option Explicit
   Private WithEvents myTXT As TextBox
   '方法的參數(shù)接口
   Public Enum sTYLE
    Lcaseit'小寫屬性
    Lbigit'大寫屬性
    Nlogoit'逆向排序?qū)傩?BR>   End Enum
  '自定義枚舉,,用來實(shí)現(xiàn)屬性的自動(dòng)賦值
  Private mvarBiaozhi As sTYLE
  '實(shí)現(xiàn)枚舉常量的連接
  Public Function dONE() As String'
  'DONE方法用來根據(jù)指定的枚舉屬性,對
  '窗體文本框進(jìn)行相應(yīng)的字符轉(zhuǎn)化操作
  '并且返回轉(zhuǎn)化后的字符串
  If mvarBiaozhi = Nlogoit Then
   dONE = StrReverse(myTXT)
   '逆向排序
  ElseIf mvarBiaozhi = Lcaseit Then
   dONE = LCase(myTXT)
   '強(qiáng)制小寫轉(zhuǎn)化
  Else
   dONE = UCase(myTXT)
   '強(qiáng)制大寫轉(zhuǎn)化
  End If
  End Function
  'DONE方法結(jié)束
  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()
   '本事件在類倍加載時(shí)激活
   MsgBox "你好,!本程序向您展示使用類的方法,、屬性、事件進(jìn)行編程的技術(shù),!"
  End Sub
  Private Sub Class_Terminate()
   '本事件在類被卸載時(shí)激活
   MsgBox "你好,!記得在Class_Terminate中填寫對象撤銷后的代碼!"
  End Sub
  '類的代碼全部結(jié)束
 ?。ㄋ模┐绑w代碼的引用編程,;
  在窗體FORM1中添加文本控件TEXT1,、下拉列表控件COMBO1、命令按鈕COMMAND1(CAPTION="開始轉(zhuǎn)化"),,調(diào)整三個(gè)控件到適當(dāng)位置,。
  Dim myT As New Class1
  '類的引用
  Private Sub Form_Load()
   Combo1.Clear
   Combo1.AddItem "字符串大寫轉(zhuǎn)化"
   Combo1.AddItem "字符串小寫轉(zhuǎn)化"
   Combo1.AddItem "字符串逆向排序"
   Combo1.ListIndex = 0
   '在列表框中添加屬性選項(xiàng)
  End Sub
  Private Sub Command1_Click()
   '當(dāng)命令按鈕按下時(shí)激活類
   myT.Attach Text1
   '方法參數(shù)聯(lián)接
   Select Case Combo1.ListIndex
    Case 0
      myT.Biaozhi = Lbigit
    Case 1
      myT.Biaozhi = Lcaseit
    Case 2
      myT.Biaozhi = Nlogoit
   End Select
   '根據(jù)列表框的選擇,給類的Biaozhi屬性賦值
   '注意,,在編程環(huán)境中,,上述屬性值自動(dòng)添加
   Text1.Text = myT.dONE
   '返回排序結(jié)束后的字符串
  End Sub
  Private Sub Form_Unload(Cancel As Integer)
   Set myT = Nothing
  End
  '良好的編程習(xí)慣
  End Sub
怎么樣,我們的代碼看起來如此的簡潔,,這種感覺就象是在使用一個(gè)控件,,不僅可以隨心所欲的調(diào)用,而且方便的使用了vb的自動(dòng)提示功能,。
 ?。ㄎ澹╆P(guān)于類的編程技術(shù)的總結(jié);
  嚴(yán)格的說,,類是vb編程中的一個(gè)相當(dāng)有用的技術(shù),,同樣也是學(xué)習(xí)和掌握中的難點(diǎn),類在大型軟件工程中應(yīng)用是非常廣泛和卓有成效的,,但是,,在小型軟件開發(fā)中,為了提高軟件的效率和代碼的清晰度,,應(yīng)該避免使用較多的類模塊,,控件和聯(lián)接庫,取代以標(biāo)準(zhǔn)模塊,。
  本文所示例的代碼比較簡單,,卻覆蓋了關(guān)于模塊編程技術(shù)的方方面面,希望初學(xué)者能夠有所借鑒,,也希望程序員能夠共同探討,。我們應(yīng)該相信,無論多么復(fù)雜的高樓大廈都是由普普通通的方磚堆砌而成的,,同樣,無論所么復(fù)雜的軟件工程都是由基本的程序語句所構(gòu)成的,,編程愛好者,、程序員和分析員的區(qū)別只是在于,用同樣的程序語句構(gòu)建的程序的不同而已,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多