VisualBasicCOM基礎之更多屬性
有時候,為了更好地處理類往往需更多的屬性。例如,假如你有四種不同的客戶群:集團、較大、較小和新的客戶類型,或者一個用于搜索的類中有三種不同的搜索方式:軟盤、硬盤和網絡。那么,能不能最好從選項列表中選擇一個,而不是用不能理解的數字或文本來設置相關屬性?
我想,答案是肯定的。因為這種處理就稱為"枚舉"。
打開上一節的工程,讓我們添加一些代碼。
在CDog類中添加下列代碼:
關鍵詞"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]。
系統自動產生下列代碼框架:
但我們需要的卻不是這個框架。代碼中,"Variant"變量類型是能接收和處理任何類型數據。在我們定義的CDog類中,最后的屬性是Age,它只能接受整型。但現在需要屬性能接收CoatType列表中的數據類型,因此需要作下列修改:
將產生的代碼中所有的"Variant"改成"CoatType";
然后,添加一些實際處理屬性的代碼。
在屬性的Get過程中,添加下列代碼:
在屬性的Let過程中,添加下列代碼:
切換到Form1;
將Command按鈕的代碼改為:
現在開始鍵入:MyDog.Coat =
奇跡出現了,當你敲下"="鍵時,出現一個含有可能選項的列表,從中我們可以選擇一個。
完成代碼的鍵入:MyDog.Coat = ShortCrewCut
下一步,我們將獲取Coat屬性的值。假如現在就來簡單地在消息對話框中顯示屬性值,則只需返回選擇項的值就可以了。例如,若選擇了ShortCrewCut,其屬性一定返回2。不信,可以試一試!
但這里采用另外一種方法,它是用If-Then語句判斷Coat:
在Command按鈕已有的代碼后面添加下列代碼:
這里的代碼只是簡單判斷Coat屬性值,并顯示相應的消息對話框。當然,這里也可以使用"Select Case"語句。
最后,我們添加最后一條語句來釋放計算機內存:
在Command按鈕已有的代碼后面添加下列代碼:
按F5運行程序,并單擊Command按鈕測試一下。
結果怎樣?
我想,答案是肯定的。因為這種處理就稱為"枚舉"。
打開上一節的工程,讓我們添加一些代碼。
在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按鈕測試一下。
結果怎樣?