1. 程式人生 > >KeyUp 和KeyDown 、KeyPress之間的區別

KeyUp 和KeyDown 、KeyPress之間的區別

opera hang https log shift 菜單鍵 str ref super

keydown:用戶在鍵盤上按下某按鍵是發生。一直按著某按鍵則會不斷觸發(opera瀏覽器除外)。
keypress:用戶按下一個按鍵,並產生一個字符時發生(也就是類似shift、alt、ctrl之類的鍵,它不產生字符,是不會觸發press的。用戶按了一個能在屏幕上輸出字符的按鍵keypress事件才會觸發)。一直按著某按鍵則會不斷觸發。
keyup:用戶釋放某一個按鍵是觸發。

1、KeyPress主要用來捕獲數字(註意:包括Shift+數字的符號)、字母(註意:包括大小寫)、小鍵盤等,除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜單鍵}、{開始鍵}和方向鍵外的ANSI字符。

KeyDown 和 KeyUP 事件過程通常可以捕獲鍵盤除了PrScrn所有按鍵(這裏不討論特殊鍵盤的特殊鍵

2、KeyPress 只能捕獲單個字符
KeyDown 和KeyUp 可以捕獲組合鍵。

3、KeyPress 不顯示鍵盤的物理狀態(SHIFT鍵),而只是傳遞一個字符。KeyPress 將每個字符的大、小寫形式作為不同的鍵代碼解釋,即作為兩種不同的字符。

KeyDown 和KeyUp 不能判斷鍵值字母的大小。KeyDown 和 KeyUp 用兩種參數解釋每個字符的大寫形式和小寫形式:keycode — 顯示物理的鍵(將 A 和 a 作為同一個鍵返回)和 shift —指示 shift + key 鍵的狀態而且返回 A 或 a 其中之一。


5、KeyPress 不區分小鍵盤和主鍵盤的數字字符。
KeyDown 和KeyUp 區分小鍵盤和主鍵盤的數字字符。

6、KeyDown、KeyUp事件是當按下 ( KeyDown ) 或松開 ( KeyUp ) 一個鍵時發生的。
由於一般按下鍵盤的鍵往往會立即放開(這和鼠標不同),所以這兩個事件使用哪個差別不大。

而且,up和其他兩者還有一個區別:要判斷key修改後的狀態必須用up。

補充:

TextChanged:
文本更改時觸發,分在程序裏更改,用戶使用鍵盤更改,無論那中更改,都會觸發TextChanged事件

KeyDown:
也是在文本更改時觸發,但只有用戶使用鍵盤更改時才觸發,在程序裏更改不觸發


有些控件將會在 KeyDown 上處理某些擊鍵。例如,RichTextBox 在調用 KeyPress 前處理 Enter 鍵。在這種情況下,您無法取消 KeyPress 事件,而是必須從 KeyDown 取消擊鍵。

參考文章:

KeyDown、KeyPress和KeyUp事件的區別與聯系

KeyUp 和KeyDown 、KeyPress之間的區別