下面的循序漸進的過程顯示了如何給窗體創(chuàng)建自定義事件。要試用此練習,可打開一個新的“標準 EXE”工程,并按如下面步驟去做:
要將事件添加到Form1 中,請按照以下步驟執(zhí)行:
- 在“工程”菜單上,選擇“添加類模塊”,將類模塊添加到工程中。將下面的代碼放置到 Class1 的“聲明”部分:
Public Property Get Form1() As Form1 Set Form1 = mForm1 End Property Public Property Set Form1(ByVal NewForm1 As Form1) Set mForm1 = NewForm1 End Property
如果使用過程視圖,則不能同時查看屬性過程。單擊代碼窗口左下角的“全模塊視圖”按鈕,轉(zhuǎn)換到全模塊視圖。單擊過程視圖旁邊的“過程視圖”按鈕,可以返回過程視圖。(將鼠標在各個按鈕上移動一下,看看哪個是哪個。)
- 將下面的代碼添加到 Form1 的“聲明”部分:
Event Gong Private mc1 As Class1
因為已經(jīng)創(chuàng)建了 Class1,所以創(chuàng)建 Class1 類型的變量是可能的。這個過程要在 Form1 和 Class1 之間切換幾次,因為在模塊中的操作步驟,需要首先給另一個模塊添加代碼。
- 返回 Class1,并將下面的代碼添加到“聲明”部分。
Private WithEvents mForm1 As Form1
就象在“向類中添加事件”所討論的那樣,WithEvents 關(guān)鍵字意味著 Form1 的這個實例是與事件相關(guān)聯(lián)的。注意,這一步成為可能,要到已經(jīng)創(chuàng)建了 Gong 事件。
- 在 Class1 的“代碼”窗口上的左邊“對象”下拉菜單上,選擇“mForm1”來為 Gong 事件得到事件過程。將下面的代碼添加到該事件過程中:
Private Sub mForm1_Gong() MsgBox "Gong!" End Sub
- 返回 Form1。在“對象”下拉菜單上,選擇“添加窗體”,在右邊“過程”下拉菜單上,選擇“加載”。將下面的代碼添加到事件過程中:
Private Sub Form_Load() Set mc1 = New Class1 Set mc1.Form1 = Me End Sub
第一行創(chuàng)建了一個 Class1 對象,而第二行則將對 Form1 (也就是說,是 Me - 在 Form1 的“代碼”窗口中,Me 指的是 Form1;而在 Class1 的“代碼”窗口中,Me 指的是 Class1)的引用賦給其 Form1 屬性(在第一步所創(chuàng)建的)。
- 將三個文本框放置到 Form1 上。在“對象”和“過程”下拉菜單上,依次為每個控件選擇“Change”事件過程,并將相同代碼行放置到它們中的每個里面:
Private Sub Text1_Change() RaiseEvent Gong End Sub
每次當某個文本框的內(nèi)容改變時,都將引發(fā)窗體的 Gong 事件。
- 按 F5 鍵,運行工程。每次在其中一個文本框內(nèi)鍵入字符時,信息框都將響鈴。這是很令人惱火的,但它顯示了怎樣將一個事件添加到窗體中,然后從幾個控件得到通知。
就象在上面的“聲明和引發(fā)事件”所述,可以將參數(shù)添加到事件中。例如,可能將控件名—或者更好是用對控件的引用—傳遞給事件的接收者。