概述
事件(Event):
事件是指由系統事先設定的、能被對象識別和回響的動作。
例如:我們在窗體上按了一下滑鼠左鍵,這樣就發生了一個窗體的“Click”(即單擊)事件,並執行與其對應的事件過程。這個的事件過程名稱為: Form1_Click
我們可以為事件過程編寫代碼,使得當某個對象發生了某個事件時可以執行我們需要的一些操作。
事件即控制項對外部條件的反應,不同的控制項具有不同的事件。如:對於命令按鈕,通常情況下我們都是單擊它,所以最常使用的是單擊事件,對於驅動器列表框控 件,通常我們使用的是它的改變事件。但我們使用控制項的相應事件時,我們必須對其相應的事件進行編寫代碼,否則控制項什麼事情也不會做。
事件處理器
確定控制項如何回響事件的事件過程可以稱之為“事件處理器”。
要為某一控制項的特定事件編寫程式,可以通過雙擊控制項切換到代碼視窗再選擇相應的事件來完成,也可以通過“視圖”選單中的“代碼視窗”命令切換到代碼編輯視窗來完成。
我們看到兩個下拉列表框,第一個下拉列表框裡包含了窗體中所有的控制項,包括窗體本身;第二個下拉列表框中包含了選中控制項的所有事件。在此狀態下,要對某個 控制項進行編程,需要 先在左邊的下拉列表框中選中要編程的控制項,然後再右邊的下拉列表框中選擇要編程的事件。例如我們要對“Commandl”控制項的“KeyDown'’事件 進行編程。
控制項名稱和相應事件的名稱共同構成了事件處理器的名稱,如上圖中所示的“Form Load ()”表示對象是“Form'’窗體,“Load'’表示窗體的載入事件,即窗體啟動時發生的事件,對此事件進行編程可以確定窗體啟動時所做的事情。
常用的事件有兩種,即滑鼠事件和鍵盤事件。
滑鼠事件
滑鼠事件是Visual Basic編程中最常用到的事件,多數控制項都支持滑鼠操作,因此對鼠 標事件進行編程是非常重要的。
滑鼠事件主要有以下幾種:
Click:單擊事件,即單擊滑鼠時發生的事件。
DblClick:雙擊事件,即雙擊滑鼠時發生的事件。
MouseDown:滑鼠按下時發生的事件。
MouseUp:滑鼠抬起時發生的事件。
MouseMove:滑鼠移動時發生的事件,對某控制項的此事件進行編程,則當滑鼠移過此控制項時就會觸發此事件,執行其相應代碼。
滑鼠事件的發生順序是:
(1)首先發生的是MouseMove事件,當滑鼠移動時,將會連續觸發MoouseMove事件。
(2)當滑鼠按下時發生MouseDown事件。
(3)滑鼠鬆開時發生MouseUp事件。
(4)如果按住的是滑鼠左鍵,則Click事件在MouseUp之後發生。
雙擊滑鼠時事件發生順序是:
(1)當滑鼠按下時發生MouseDown事件。
(2)滑鼠鬆開時發生MouseUp事件。
(3)單擊滑鼠發生Click事件。
(4)雙擊滑鼠發生DblClick事件。
(5)完成滑鼠雙擊時發生MouseUp事件。
在上面所列出的這些事件中,最常用到的就是Click事件和DblClcik事件,MouseMove和 douseUp事件不太經常用,一般用在需要對滑鼠進行處理的地方。如:對於最常見的命令按鈕,通常情況下我們使用Click事件;而在進行畫圖的時候, 例如畫一條直線,必須先按住滑鼠左鍵,然後拖動滑鼠,再鬆開滑鼠。在此過程中,首先觸發MouseDown事件,我們可以在此事件中記錄滑鼠的開始位置, 再對MouseUp事件進行編程,以記錄滑鼠的結束位置;其中還要對MouseMoove事件進行編程,以在移動過程中進行處理畫圖操作,而不是 Click或DblClick事件。
滑鼠的單擊事件定義如下:
Sub Click()
End Sub
雙擊事件定義如下:
Sub DblClick()
End Sub
對於MouseDown和MouseUp事件,它們的定義要複雜的多。對於MouseUp事件,其定義如下:
Private Sub Labell _MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
End S
在上面的參數中,Button As Integer定義了參數Button,該參數是用於確定按下的是滑鼠的左鍵,右鍵,還是中鍵,其取值如下表所示。
常量 數值 說明
VbleftButton 1 按下滑鼠左鍵
VbRightButton 2 按下滑鼠右鍵
VbMiddleButton 4 按下滑鼠中鍵
Shift As Integer定義整型參數Shift,該參數用於確定鍵盤上Shift鍵、Ctrl鍵、Alt 鍵是否被按下,其取值如下表所示。
常量 | 數值 | 說明 |
VbShiftMask | 1 | 按下Shift鍵 |
VbCtrlMask | 2 | 按下Ctrl鍵 |
VbAltMask | 4 | 按下Alt鍵 |
要判斷是哪個鍵被按下了,要由相應的程式代碼來完成。如:
Private Sub Labell MouseUp(Button AS Integer,Shift As Integer,X aS Sing , Y as Single)
If Button=VbRightButton Then
Msgbox(“你按下去的是滑鼠右鍵”)
End If
End Sub
此段代碼在滑鼠抬起時執行,程式中用If條件判斷語句來判斷究竟是哪個鍵被按
當Button=VbRightButton成立時,即滑鼠右鍵被按下,這時可以執行相應的操作。
Private Sub Labell MouseUp(Button As Integer,Shift As Integer,X as Sin2 Single)
If Shift=2 Then
Msgbox(“單擊滑鼠時Ctrl鍵被按下”)
EndIf
End Sub
這段代碼在執行過程中判斷當滑鼠抬起時鍵盤上哪個鍵被按了下去。如上表說明,當Shift值為2時,表示Ctrl鍵被按了下去。
由上面的例子可以看出我們可以對滑鼠進行一些判斷,然後執行一些特殊操作,但用起來通常比較麻煩。
鍵盤事件
滑鼠事件是由滑鼠鍵的單擊、雙擊、移動等操作時發生,鍵盤事件 則是在鍵盤的某個鍵按下去時觸發。除了滑鼠事件外,通常需要對鍵盤事件進行編程。鍵盤事件主要有以下幾種:
(1)KeyDown:當鍵盤上某鍵被按下去時發生。
(2)KeyUp:鍵盤上的鍵抬起來時發生。
(3)KeyPress:此事件發生在鍵盤被按下後和字元被顯示出來之前發生。
對於鍵盤事件,相對來說KeyDown事件和KeyUp事件使用比較少,通常情況下對KeyPress事件編程較多,因為此事件注重鍵盤被按下的是哪個鍵
KeyPress事件定義如下:
Private Sub Textl_KeyPress(KeyAscii As Integer)
End Sub
其中,參數KeyAscii被定義為整型變數,表示被按下去鍵的Ascii碼,我們可以通過對變數KeyAscii值的判斷來執行一些特殊操作。例如要想實現在文本框中只能輸入數字,不接受其它字元,可以編寫如下代碼:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii < 48 Or KeyAscii > 57 Then
KeyAscii = 0
End If
End Sub
此段代碼表示:如果被按下去的鍵的Ascii碼值不在48到57之間(即輸入不是數字),則將KeyAssii值設定為零。從而不進行操作,文本框中並不存在輸入的字元。
(4) Change:Change事件在控制項的內容發生改變時執行。如:當我們要做一個類似記事本程式的時候,用文本框控制項作為內容編輯區,當文本框內容改變而 並未保存時,用戶卻在此時退出程式,我們希望程式能夠給出提示。可以通過定義一個整型變數“IsChang",當其值為0時表示未存檔,其值為1時表示存 盤了,在文本框控制項的change事件中輸入如下代碼:
“IsChange = 0"。在程式退出事件中對IsChange值進行判斷,當值為0時就給予提示,否則退出程式。程式代碼如下:
Private Sub Textl_Change()
IsChange = 0
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If lsChange = 0 Then
MsgBox ("還未存檔,是否存檔"), VbOkCancle, "提示!"
End If
End Sub
此段代碼用於程式退出時的判斷,Form_QueryUnload事件表示程式退出時所執行的事件。
這裡主要介紹了事件處理器,常見的屬性與各種事件,在Windows應用程式中,我們經常要用到上面所介紹的屬性與事件。
焦點
在開發Windows程式時,有一個很重要的概念——焦點。所謂焦點,就是控制項能夠接受鍵盤輸入的當前狀態。只有具有焦點的控制項,才能接受用戶的鍵盤輸 入;換一種說法也可以這樣說,當前狀態下用戶所有的鍵盤輸入只能被具有焦點的控制項所獲得。需要注意的是,焦點只是在程式運行時才有的概念,也就是說在設計 程式時,不能說某個控制項具有焦點或不具有焦點。
焦點是對象接受用戶滑鼠操作或鍵盤操作的能力。當對象具有焦點時,才可以接受用戶的操作。例如,在有就幾個文本框的窗體中,只有具有焦點的文本框才能接受用戶的輸入。
要使用某個控制項獲得焦點,可以有如下三種方法:
(1)、使用鍵盤上的“Tab”鍵,將焦點移到相應的控制項上。
(2)、使用滑鼠直接在相應的控制項上單擊就可以了。
(3)、在程式代碼中使用該控制項的“SetFocus”方法。
對於絕大多數的控制項,都具有“TabStop”屬性和“Tablndex”屬性。
其中,“TabStop”屬性是用來設定是否允許 用戶使用“Tab”鍵將焦點移到該控制項上,默認情況下是允許的。“TabStop”屬性有兩個取值:“True”和“False”,若其值為“True” 時,允許使用“Tab”鍵將焦點移到該控制項;否則,就不允許。但要注意,不管“TabStop'’屬性的取值為“True”還是為“False”,使用鼠 標都可以將焦點轉移到該控制項。
“Iablndex”屬性則是用來設定該控制項的跳表順序的。前面已經說過,使用“Tab”鍵可以將焦點從一個控制項上轉移到另一個控制項上,在這個過程中就有 一個跳表順序的問題。也就是說,當用戶第一次按下“Tab”鍵時,焦點將會移到哪一個控制項上;第二次按下“Tab”鍵時,焦點又會移到哪一個控制項上等,這 個順序就是跳表順序。
在設計窗體時,跳表順序是根據控制項放人窗體的先後順序來決定的。即第一個放人窗體的控制項將最早獲得焦點,以後每按一次“Tab”鍵,焦點就會轉移到下一個放人窗體中的控制項上。
在很多情況下,某些控制項不需要使用“Tab”鍵將焦點移到該控制項上或是不能根據控制項放人窗體的先後順序來決定跳表順序,這時就需要設定“TabStop” 屬性和“Tablndex'’屬性了。“Tablndex”屬性的取值是一個整數,從0開始依次類推,該屬性的值小的將先獲取焦點。
另外,還有兩個與焦點相關的事件:“GotFocus”事件和“LostFocus”事件。當焦點從一個控制項轉移到另一個控制項上時,前者即曾經擁有焦點的控制項,將會發生“LostFocus”事件而後者即將會擁有焦點的控制項,則會發生“GotFocus”事件。
常見事件
change 對於滾動條來說,滑塊位置改變;對於textbox來說,內容改變
click 對象單擊
dblclick 對象雙擊
dragdrop 滑鼠拖動
dragover 滑鼠拖過
dropdown 滑鼠鍵鬆開
error 錯誤處理
gotfocus 獲取焦點
itemcheck
keydown 鍵盤按下
keyup 鍵盤抬起
keypress 鍵盤按鍵
linkclose 網路連線關閉
linkerror 網路連線錯誤
linknotify
linkopen 網路已連線
oledragover
olegivefeedback
olestartdrag
pathchange
patternchange
reposition
scroll
timer 定時器計時達到預定間隔
validate
LostFocus 對象失去焦點
Load 對象載入,比如form的載入
MouseDown 滑鼠按下
MouseMove 滑鼠移動
MouseUP 滑鼠抬起
OlecompleteDrag ole對象的拖動
OleDragDrop ole對象的移動
paint 繪畫
QueryunLoad
Resize form或者控制項大小重繪
Terminate 執行緒,進程終止
Unload 卸載