C# 中 KeyPress 、KeyDown 和KeyPress的詳細區別[轉]


 

研究了一下KeyDown,KeyPress 和KeyUp ,發現之間還是有點學問的。

讓我們帶着如下問題來說明,如果你看到這些問題你都知道,那么這篇文章你就當復習吧:)

1.這三個事件的順序是怎么樣的?

2.KeyDown 觸發后,KeyUp是不是一定觸發?

3.三個事件的定義

4.KeyDown、KeyUp 和KeyPress 之間的區別

5.如何區分是否按的是小鍵盤?

6.PrScrn按鍵三個事件能夠捕獲嗎?

7.{菜單鍵}和{開始鍵}KeyPress能夠捕獲嗎?

8.如何捕獲系統的組合鍵?

9.通過什么方式捕獲PrScrn按鍵事件?

(一)鍵事件按下列順序發生: 

  1. KeyDown

  2. KeyPress

  3. KeyUp

 (二)KeyDown觸發后,不一定觸發KeyUp,當KeyDown 按下后,拖動鼠標,那么將不會觸發KeyUp事件。

 (三)定義

KeyDown:在控件有焦點的情況下按下鍵時發生。

KeyPress:在控件有焦點的情況下按下鍵時發生。(下面會說和KeyDown 的區別)

KeyUp:在控件有焦點的情況下釋放鍵時發生。

 (四)KeyPress 和KeyDown 、KeyPress之間的區別

          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 可以捕獲單個字符的大小寫

          4.KeyDown和KeyUp 對於單個字符捕獲的KeyValue 都是一個值,也就是不能判斷單個字符的大小寫。

          5.KeyPress 不區分小鍵盤和主鍵盤的數字字符。

               KeyDown 和KeyUp 區分小鍵盤和主鍵盤的數字字符。

          6.其中PrScrn 按鍵KeyPress、KeyDown和KeyUp 都不能捕獲

 (五)系統組合鍵的判定

在使用鍵盤的時候,通常會使用到CTRL+SHIFT+ALT 類似的組合鍵功能。對於此,我們如何來判定?

     通過KeyUp 事件能夠來處理(這里說明一下為什么不用KeyDown,因為在判定KeyDown的時候,CTRL、SHIFT和ALT 屬於一直按下狀態,然后再加另外一個鍵是不能准確捕獲組合鍵,所以使用KeyDown 是不能准確判斷出的,要通過KeyUp 事件來判定 )

     這里簡單的列舉出CTRL+其它鍵的組合判定代碼:

 

復制代碼

private void Form3_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.Control)
            {
                MessageBox.Show("KeyUp:Ctrl+" + e.KeyValue.ToString());
            }
        }
復制代碼

 

 (六)捕獲PrScrn按鍵事件

 通過一種鈎子的方式可以判定PrScrn 按鍵事件,鈎子可以獲取任何鍵盤事件。

     這里給出CodeProject 上面的開源代碼的解決方案。大家有興趣自己研究吧:)。


免責聲明!

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



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