top
Loading...
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類通用聲明部分中,添加變量的聲明:

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歲的。

那么,這種情況應該怎樣處理呢?

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