VB編程的鍵盤控制

在VB中,不少控件都提供了鍵盤輸入功能(如文本框、組合框等),但它們對鍵盤的處理較簡單,遇到複雜一點的要求即無能爲力。設計

於是VB提供了KeyPress、KeyUp、KeyDown三種鍵盤事件,當用戶按鍵時,會觸發這三種事件,並且窗體和接受鍵盤輸入的控件都識別這三種事件。code

下表對這些事件做了描述:orm

鍵盤事件  觸發緣由
KeyPress 按下某ASCII字符鍵
KeyDown 按下鍵盤的任意鍵
KeyUp 釋放鍵盤的任意鍵

 

 

 

 

KeyDown和KeyUp事件提供了最低級的鍵盤響應。對象

 

可用這些事件檢測KeyPress事件沒法檢測到的狀況: 事件

SHIFT、CTRL和ALT鍵的特殊組合。  ci

光標控制鍵。 
table

HOME、END、PAGEUP、PAGEDOWN等。 sed

數字小鍵盤的數字鍵與打字鍵盤數字鍵的區別。 
程序

不只響應按鍵操做並且響應釋放鍵操做(KeyPress只響應按鍵操做)。tab

 

KeyPress事件:在按下與ASCII字符對應的鍵時將觸發KeyPress事件。

ASCII字符集表明標準鍵盤的字母、數字和標點符號以及部分控制鍵(ENTER、TAB、BACKSPACE鍵等)。

KeyDown和KeyUp事件可以檢測其它功能鍵、編輯鍵和光標定位鍵。

當處理標準ASCII字符時應使用KeyPress事件。

若是但願將輸入到文本框中的全部字符都強制轉換爲大寫字符,則可在輸入時使用此事件轉換大小寫: 
Private Sub Text1_KeyPress(KeyAscii As Integer)

KeyAscii = Asc(Ucase(Chr(KeyAscii)))

End Sub 
KeyAscii參數返回對應所按鍵的ASCII代碼。

 

下述事件過程使用 KeyPress檢測用戶是否正在按BACKSPACE鍵:

Private Sub Text1_KeyPress(KeyAscii As Integer) 

If KeyAscii = 8 Then MsgBox "You Pressed the BACKSPACE key." 

End Sub 
注:BACKSPACE鍵的ASCII值爲8。

 

附:經常使用鍵的Keycode值

Keycode Keycode Keycode
BACKSPACE 8 TAB 9 ENTER 13
CAPS LOCK 20 SHIFT 16 CTRL 17
PAGEDOWN 34 PAUSE 19 ESC 27
SPACEBAR 32 END 35 HOME 36
PAGEUP 33 INS 45 DEL 46
←↑→↓ 37-40 0-9 48-57 A-Z 65-90
F1-F12 112-123 小鍵盤* 106 小鍵盤+ 107
小鍵盤0-9 96-105 小鍵盤- 109 小鍵盤/ 111
小鍵盤ENTER  108        

 

 

 

 

 

 

 

 

 

 

Shift參數 :鍵盤事件使用shift參數來判斷按下某鍵的同時是否按下了SHIFT、CTRL、ALT鍵或它們的組合。

若是按SHIFT鍵,則shift 爲1;按CTRL鍵,shift爲2;按ALT鍵,shift爲3,經過鍵值總和來判斷這些組合。

例如:同時按下SHIFT和ALT鍵時shift等於5(1+4)。     

在使用中,可將KeyDown 與KeyUp事件及shift參數一同使用以區分字符的大小寫或檢測各類組合鍵。

例如:如下事件過程可捕獲CTRL+ALT+F1並給出提示: 

Private Sub Text1_Keydown(KeyCode As Integer, Shift As Integer) 

If Keycode = 112 And Shift = 6 Then MsgBox "You press the CTRL+ALT+F1 Key!" 

End Sub 

 

編寫窗體級鍵盤處理程序 :
只有得到焦點的對象纔可以接受鍵盤事件。

當窗體爲活動窗體且其上全部控件均未得到焦點時,窗體纔得到焦點。

這種狀況只有在空窗體或窗體上的控件都無效時才發生。

若是將窗體上的KeyPreview屬性設置爲True,則每一個控件在識別其所擁有的KeyPress、KeyUP、KeyDown事件以前,窗體會搶先接受這些鍵盤事件。

當您但願不管什麼時候按下某鍵都會執行同一個操做,而無論哪一個控件在此時具備焦點時,這樣設置KeyPreview屬性極爲有用。

可在"屬性"窗口中或經過Form_Load過程當中的代碼設置窗體的KeyPreview屬性爲True: 

Private Sub Form_Load 

Form1.KeyPreview = True

End Sub 

須要注意的是,當把窗體的KeyPreview屬性設置爲True時,窗體在控件以前識別鍵盤事件,但對控件來講事件仍然會發生,這可能會形成一次按鍵觸發多個不一樣的處理。

爲防止這種狀況,可在窗體鍵盤事件過程結束前將KeyAscii或KeyCode重置爲0。

例如:在窗體上將ENTER鍵捕獲並處理後,把KeyAscii或KeyCode設置爲0,則控件在本身的鍵盤事件過程當中將沒法識別按下的ENTER鍵,於是控件的鍵盤事件過程也不被調用。

 

設計一個窗體和文本框以及其它控件,不管焦點在哪一個控件,按下CTRL+P即讓文本框顯示"Hello!";按下ALT+C 清除文本框;按下F10結束程序。 
Private Sub Form_Load()

Form1.KeyPreview = True

End Sub  


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = 80 And Shift = 2 Then Text1.Text = "Hello!"

If KeyCode = 67 And Shift = 4 Then Text1.Text = ""

If KeyCode = 121 Then End 

End Sub

相關文章
相關標籤/搜索