top
Loading...
VisualBasicCOM基礎之更多屬性
有時候,為了更好地處理類往往需更多的屬性。例如,假如你有四種不同的客戶群:集團、較大、較小和新的客戶類型,或者一個用于搜索的類中有三種不同的搜索方式:軟盤、硬盤和網絡。那么,能不能最好從選項列表中選擇一個,而不是用不能理解的數字或文本來設置相關屬性?

我想,答案是肯定的。因為這種處理就稱為"枚舉"。



打開上一節的工程,讓我們添加一些代碼。

在CDog類中添加下列代碼:

Public Enum CoatType

BigAndShaggy = 1

ShortCrewCut = 2

PoodleStyleAfro = 3

Unknown = 4

end Enum

關鍵詞"Enum"就是用來定義枚舉的,換句話說,它是可能選項的列表。各選項都有相應的數字,也就是說BigAndShaggy表示1,ShortCrewCut等于2,等等。

需要注意的是,當將枚舉項相關信息添加在數據庫中時,其相應的數值是非常有用的。由于"BigAndShaggy"實際代表的是數值1,所以可以直接將其插入到數據庫的數值字段中。這就意味著,可以方便使用字符串來維護數據庫。

所以,我們來創建一個Dog的Coat類型列表,并另外定義一個屬性,將這些類型添加在CDog類中。

在類中聲明下列變量:

Private udtCoat As CoatType

這個定義的私有變量用來保存即將添加的Coat類型屬性,注意到udtCoat變量既不是字符串也不是整型,而是我們自己定義的枚舉類型CoatType。

當類CDog打開時,選擇"Tools"菜單中的"Add Procedure"命令,彈出相應的對話框;

Name編輯框中鍵入Coat;

選中"Property"選項按鈕,然后單擊[OK]。

系統自動產生下列代碼框架:

Public Property Get Coat() As Variant

End Property

Public Property Let Coat(ByVal vNewValue As Variant)

End Property

但我們需要的卻不是這個框架。代碼中,"Variant"變量類型是能接收和處理任何類型數據。在我們定義的CDog類中,最后的屬性是Age,它只能接受整型。但現在需要屬性能接收CoatType列表中的數據類型,因此需要作下列修改:

將產生的代碼中所有的"Variant"改成"CoatType";

然后,添加一些實際處理屬性的代碼。

在屬性的Get過程中,添加下列代碼:

Coat = udtCoat

在屬性的Let過程中,添加下列代碼:

udtCoat = vNewValue

切換到Form1;

將Command按鈕的代碼改為:

Dim MyDog As CDog
Set MyDog = New CDog
MyDog.Name = "Billy"

現在開始鍵入:MyDog.Coat =

奇跡出現了,當你敲下"="鍵時,出現一個含有可能選項的列表,從中我們可以選擇一個。

完成代碼的鍵入:MyDog.Coat = ShortCrewCut

下一步,我們將獲取Coat屬性的值。假如現在就來簡單地在消息對話框中顯示屬性值,則只需返回選擇項的值就可以了。例如,若選擇了ShortCrewCut,其屬性一定返回2。不信,可以試一試!

但這里采用另外一種方法,它是用If-Then語句判斷Coat:

在Command按鈕已有的代碼后面添加下列代碼:

If MyDog.Coat = BigAndShaggy Then

MsgBox "You have a big, bouncy, bushy pup!"

ElseIf MyDog.Coat = PoodleStyleAfro Then

MsgBox "Your pooch is pretty, petit and pooch-like!"

ElseIf MyDog.Coat = ShortCrewCut Then

MsgBox "Your dog is full of oomph, oomph and more oomph!"

ElseIf MyDog.Coat = Unknown Then

MsgBox "I have no idea about your dog. I don't think " & _

"you do either!"

End If

這里的代碼只是簡單判斷Coat屬性值,并顯示相應的消息對話框。當然,這里也可以使用"Select Case"語句。

最后,我們添加最后一條語句來釋放計算機內存:

在Command按鈕已有的代碼后面添加下列代碼:

Set MyDog = Nothing

按F5運行程序,并單擊Command按鈕測試一下。

結果怎樣?


作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗