VisualBasicCOM基礎講座之類的建立
在本節中,我們來實踐一下。首先創建一個COM對象,然后使用它,最后再想法改進。
首先進行下面兩步:
運行Visual Basic;選擇 "Standard EXE"工程類型;由于COM對象是基于類的,而類實際上是程序包,就像模塊中的代碼一樣。所以:
選擇"Project"->"Add Class Module";當相應的對話框出現后,選擇"'Class Module",然后單擊"Open"按鈕。
這樣,在桌面上顯示一個表單,以及包含在工程Project1中的Class1。
下面再將空的類的類名更改:
在類的屬性窗口中,將類的Name屬性改成CDog。
需要說明的是,為了區別起見,每個對象名的前面都有相應的前綴,例如Text Box對象前是"txt"、Form前是"frm"、類前可以大寫字母"C"或小寫字母"cls",但這里使用前者。
下面我們添加一些代碼來測試一下:
在CDog類通用聲明部分中,添加變量的聲明:
然后,打開Form1;
在表單中添加一個命令按鈕;
打開代碼窗口,為該命令按鈕添加下列代碼:
下面就來解釋上述代碼的含義:
該行語句是用來通知Visual Basic為CDog對象設置一個位空間,但這時還不能使用該對象,必須等到下條語句為止:
它是用來創建CDog的實例。這就意味著前面空的MyDog模板變成了現在可以使用的CDog對象。
上述代碼的第一行是用來設置MyDog的Name變量,同時第二行語句是用來將該變量的內容顯示在消息對話框中。最后:
用來將MyDog對象簡單的置空。
按F5鍵運行并測試。
怎么樣?但同時,我們可能不禁要問,標準模塊和類模塊究竟有什么不同?我們再來看看下面的示例:
將命令按鈕的代碼變成:
與最前面的代碼不同的是,這里的代碼實際上是定義兩個對象MyDog和MyDog2,這兩個對象是基于CDog的相互獨立的兩個對象。
按F5鍵運行并測試。
結果怎樣?這一次是不是有兩個對話框出現?一個顯示"Billy Moore",另一個顯示"Sadie Moore"。
上述定義的每個對象中除了Name外,沒有任何實際的屬性,因此下面過程就來添加:
打開前面的Class1;
聲明下面的公共變量:
打開前面的Form1;
將命令按鈕的代碼變成:
這些代碼和前面差不多,只不過這里使用了Age變量。
按F5鍵運行并測試。
應該出現顯示name和age內容的兩個消息對話框。
現在再試著將其中一個對象的age值設置成1,000或者30,000。看看結果如何?程序照樣正常運行,這是因為定義的整型變量最大值可達32,767,但是實際中的狗(Dog)是不會有30,000歲的。
那么,這種情況應該怎樣處理呢?
首先進行下面兩步:
運行Visual Basic;選擇 "Standard EXE"工程類型;由于COM對象是基于類的,而類實際上是程序包,就像模塊中的代碼一樣。所以:
選擇"Project"->"Add Class Module";當相應的對話框出現后,選擇"'Class Module",然后單擊"Open"按鈕。
這樣,在桌面上顯示一個表單,以及包含在工程Project1中的Class1。
下面再將空的類的類名更改:
在類的屬性窗口中,將類的Name屬性改成CDog。
需要說明的是,為了區別起見,每個對象名的前面都有相應的前綴,例如Text Box對象前是"txt"、Form前是"frm"、類前可以大寫字母"C"或小寫字母"cls",但這里使用前者。
下面我們添加一些代碼來測試一下:
在CDog類通用聲明部分中,添加變量的聲明:
| Public Name As String |
然后,打開Form1;
在表單中添加一個命令按鈕;
打開代碼窗口,為該命令按鈕添加下列代碼:
| Dim MyDog As CDog Set MyDog = New CDog MyDog.Name = "Billy Moore" MsgBox MyDog.Name Set MyDog = Nothing |
下面就來解釋上述代碼的含義:
| Dim MyDog As CDog |
該行語句是用來通知Visual Basic為CDog對象設置一個位空間,但這時還不能使用該對象,必須等到下條語句為止:
| Set MyDog = New CDog |
它是用來創建CDog的實例。這就意味著前面空的MyDog模板變成了現在可以使用的CDog對象。
| MyDog.Name = "Billy Moore" MsgBox MyDog.Name |
上述代碼的第一行是用來設置MyDog的Name變量,同時第二行語句是用來將該變量的內容顯示在消息對話框中。最后:
| Set MyDog = Nothing |
用來將MyDog對象簡單的置空。
按F5鍵運行并測試。
怎么樣?但同時,我們可能不禁要問,標準模塊和類模塊究竟有什么不同?我們再來看看下面的示例:
將命令按鈕的代碼變成:
| Dim MyDog As CDog Set MyDog = New CDog Dim MyDog2 As CDog Set MyDog2 = New CDog MyDog.Name = "Billy Moore" MsgBox MyDog.Name MyDog2.Name = "Sadie Moore" MsgBox MyDog2.Name Set MyDog = Nothing Set MyDog2 = Nothing |
與最前面的代碼不同的是,這里的代碼實際上是定義兩個對象MyDog和MyDog2,這兩個對象是基于CDog的相互獨立的兩個對象。
按F5鍵運行并測試。
結果怎樣?這一次是不是有兩個對話框出現?一個顯示"Billy Moore",另一個顯示"Sadie Moore"。
上述定義的每個對象中除了Name外,沒有任何實際的屬性,因此下面過程就來添加:
打開前面的Class1;
聲明下面的公共變量:
| Public Age As Integer |
打開前面的Form1;
將命令按鈕的代碼變成:
| Dim MyDog As CDog Set MyDog = New CDog Dim MyDog2 As CDog Set MyDog2 = New CDog MyDog.Name = "Billy Moore" MyDog.Age = 4 MsgBox MyDog.Name & " is " & MyDog.Age & " years old" MyDog2.Name = "Sadie Moore" MyDog2.Age = 7 MsgBox MyDog2.Name & " is " & MyDog2.Age & " years old" Set MyDog = Nothing Set MyDog2 = Nothing |
這些代碼和前面差不多,只不過這里使用了Age變量。
按F5鍵運行并測試。
應該出現顯示name和age內容的兩個消息對話框。
現在再試著將其中一個對象的age值設置成1,000或者30,000。看看結果如何?程序照樣正常運行,這是因為定義的整型變量最大值可達32,767,但是實際中的狗(Dog)是不會有30,000歲的。
那么,這種情況應該怎樣處理呢?