VB編程的鍵盤控制


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

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

下表對這些事件作了描述:

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

 

 

 

 

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

 

可用這些事件檢測KeyPress事件無法檢測到的情況: 

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

光標控制鍵。 

HOME、END、PAGEUP、PAGEDOWN等。

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

不僅響應按鍵操作而且響應釋放鍵操作(KeyPress只響應按鍵操作)。

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM