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