VB6因為簡單易用,受到很多朋友的喜歡。可是也有人說它功能簡單,沒有給開發人員提供足夠的 發揮餘地。比如不能方便地繼承現有控制項而派生出自己的控制項。(什嗎?寫ActiveX控制項?太麻煩了吧。 要花大量時間在介面的設計和實現上,而且你不想讓你的軟體發布時帶一堆OCX控制項吧?)其實還是有辦 法的,我們可以利用VB6裡的類別模組實現對控制項的特殊控制和事件響應。本文介紹使用類別模組把普通的 Label控制項變成表單動態分割條。
圖1 帶分隔條的表單
初識類別模組
類別模組其實是一個對象的定義,封裝了一些屬性和方法,使用前需要產生一個執行個體:
’產生類別模組clsTest的一個執行個體test
Dim test as new clsTest
然後可以使用類別模組的方法:
test.DoSomthing() ’調用test 的方法DoSomthing()
一個簡單的例子
做一個滑鼠移上去後自動獲得焦 點並將內容選中的“聰明”編輯框。
1、建立一工程,在[工程]菜單中,選擇[添 加類別模組],添加一個類別模組,更改其名稱為clsTest。
2、進入類別模組編輯介面(如圖2)。
圖2 編輯類別模組
在左邊的下拉框中 選擇“通用”,鍵入以下代碼:
’定義一個帶事件的文字框變數
Dim WithEvents MyText As TextBox
’儲存文字框是否獲得焦點的布爾變數
Dim bSetted As Boolean
’自己定義的類別模組的方法,傳入參數是文字框。
Public Sub BindText(t As TextBox)
’將文字框變數設定為傳入的文字框,即是對傳入文字框的引 用
Set MyText = t
End Sub
3、在左邊的下拉框中選擇“Class”,在右邊下拉框中選擇Initialize,這是類別模組 的初始化事件,可以在這裡寫自己的初始化代碼。VB會自動為我們添加一個事件子程式。我們要做的就 是在其中添上自己的代碼。其實這一步略過也沒什麼影響,不過對變數進行初始化是一個好習慣。
Private Sub Class_Initialize()
’將文字框變數初始化Nothing
Set MyText = Nothing
bSetted = False
End Sub
4、在左邊的 下拉框中選擇“MyText”,注意到了嗎,它就是我們在第2步定義的帶事件的文字框變數。VB 把它加進來了,再到右邊下拉框中點擊下拉按鈕,呵呵,看到什麼了?原來是我們熟悉的TextBox的所有 事件!只不過這裡的MyText文字框並不實際存在,只是一個代
號,等著你給它指定一個實際 的文字框呢。
添加事件響應代碼,這就不用我說了吧。
Private Sub MyText_GotFocus()
bSetted = True
End Sub
Private Sub MyText_LostFocus()
bSetted = False
End Sub
’滑鼠在控制項上移動時,如果還沒設定焦點,將 它設為焦點,
’並將內容選中
Private Sub MyText_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If (Not bSetted) Then
MyText.SetFocus
MyText.SelStart = 0
MyText.SelLength = 9999
End If
End Sub
到此,類別模組宣告完畢,儲存它(.cls檔案)。
5、下 面就是類別模組的使用,非常簡單。現在一個表單上放3 個TextBox控制項,名稱分別為Text1、Text2、Text3。
圖3 測試類別模組