有時候,為了更好地處理類別往往需更多的屬性。例如,如果你有四種不同的客戶群:集團、較大、較小和新的客戶類型,或一個用於搜尋的類別中有三種不同的搜尋方式:軟碟、硬碟和網路。那麼,能不能最好從選項清單中選擇一個,而不是用不能理解的數字或文字來設定相關屬性?
我想,答案是肯定的。因為這種處理就稱為"枚舉"。
打開上一節的工程,讓我們來補充一些程式碼。
在CDog類別中加入下列程式碼:
關鍵字"Enum"就是用來定義枚舉的,換句話說,它是可能選項的清單。各選項都有對應的數字,也就是說BigAndShaggy表示1,ShortCrewCut等於2,以此類推。
需要注意的是,當將枚舉項相關資訊新增在資料庫中時,其對應的數值是非常有用的。由於"BigAndShaggy"實際上代表的是數值1,所以可以直接插入資料庫的數值欄位。這就意味著,可以方便使用字串來維護資料庫。
所以,我們來建立一個Dog的Coat類型列表,並另外定義一個屬性,將這些類型加入在CDog類別中。
在類別中宣告下列變數:
PRivateudtCoatAsCoatType
這個定義的私有變數用來保存即將新增的Coat型別屬性,注意到udtCoat變數既不是字串也不是整數,而是我們自己定義的枚舉型別CoatType。
當類別CDog開啟時,選擇"Tools"選單中的"AddProcedure"指令,彈出對應的對話框;
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屬性值,並顯示對應的訊息對話框。當然,這裡也可以使用"SelectCase"語句。
最後,我們加入最後一條語句來釋放電腦記憶體:
在Command按鈕已有的程式碼後面加入下列程式碼:
按F5運行程序,並點選Command按鈕測試一下。
結果怎樣? ->