我們知道,在某些程式中,有一些捷徑(如:Shift鍵最小化、ESC鍵退出、Ctrl+S記憶體、Alt+x退出等等)。以前有一些介紹使用Win32 API可以做到,但過於繁瑣,其實VB本身已經提供了這個功能給我們。
我們來新建一個窗體Form1,對於鍵盤操作可以看到有三個事件KeyPress(),KeyDown和KeyUp,下面我對它們分別介紹:
KeyPress()事件是當使用者按下和放開一個ANSI鍵時發生(ANSI是可見ASCII字元1-127)。
文法
部分描述
object一個物件表達式,其值是"應用於"列表中的一個物件。
index一個整數,它用來唯一標識一個在控制項數組中的控制項(只有控制項數組時才有)。
keyascii是傳回一個標準數字ANSI鍵碼的整數。 Keyascii透過引用傳遞,對它進行改變可給物件。
發送一個不同的字元。將keyascii改為0時可取消擊鍵,這樣一來物件便接收不到字元。
說明
具有焦點的物件會接收該事件。一個窗體僅在KeyPreview屬性被設定為True時才能接收該事件。一個KeyPress事件可以引用任何可列印的鍵盤字符,一個來自標準字母表的字符或少數幾個特殊字符之一的字符與CTRL鍵的組合,以及ENTER或BACKSPACE鍵。 KeyPress()事件過程在截取TextBox或ComboBox控制項所輸入的按鍵時是非常有用的。它可立即測試擊鍵的有效性或在字元輸入時對其進行格式處理。改變keyascii參數的值會改變所顯示的字元。
可使用下列表達式將keyascii參數轉變為字元:
說明
對於這兩個事件來說,帶焦點的物件都接收所有擊鍵。一個窗體只有在不具有可視的和有效的控制時才可以獲得焦點。雖然KeyDown()和KeyUp()事件可應用於大多數鍵,它們最經常地還是應用於:擴展的字元鍵如功能鍵、定位鍵、鍵盤修飾鍵和按鍵的組合、區別數字小鍵盤和常規數字鍵;在需要對按下和放開一個鍵都回應時,可使用KeyDown和KeyUp事件過程。
下列情況不能引用KeyDown和KeyUp事件:窗體有一個CommandButton控件,並且Default屬性設定為True時的ENTER鍵。窗體有一個CommandButton控件,並且Cancel屬性設定為True時的ESC鍵、TAB鍵,KeyDown和KeyUp用兩種參數解釋每個字元的大寫形式和小寫形式:keycode-顯示物理的鍵(將A和a作為同一個鍵返回)和shift-顯示shift+key鍵的狀態而且返回A或a其中之一。
若需要測試shift參數,可使用該參數中定義各位的shift常數。此常數有下列數值:
常數值描述
vbShiftMask 1 HIFT鍵的位
屏蔽。
VbCtrlMask 2 CTRL鍵的
位元屏蔽。
VbAltMask 4 ALT鍵的位
屏蔽。
此常數用作位元屏蔽,它可被用來測試任何鍵組合。
注意:如果KeyPreview屬性被設定為True,則視窗先於該窗體上的控制項接收到此事件。可用KeyPreview屬性來建立全域鍵盤處理例程。
了解了以上知識,我們可以製作出非常完美而且帶有快捷鍵的程序,例如我們在一個程序中要用Ctrl+S盤,Shift最小化,Alt+X和ESC退出:
先啟動vb選擇新建EXE文件,在Form1窗體上拉一個TextBox,並把Form1的KeyPreview屬性設為True,雙擊Form1,選擇Form的KeyPress事件,輸入如下程式碼: