WinForm中窗體控件的鍵盤事件KeyPress不響應
今天在做一個C#的WinForm窗體的時候,需要在窗體的某個控件上響應用戶的鍵盤事件。
我在控件的事件屬性頁里面很簡單的找到了KeyDown,KeyPress,KeyUp這幾個鼠標事件,查看了一下說明:
KeyDown:在首次按下某個鍵時發生
KeyPress:在空間具有焦點且用戶按下並釋放某個鍵后發生
KeyUp:在釋放鍵時發生
好吧,很明顯KeyPress最符合要求么,可是,按了鍵盤上的Delete鍵老半天發現KeyPress竟然沒有響應,斷點一直進不去。試了一下控件其他兩個事件KeyDown和KeyUp,是正常的。於是在網上找了找,找到一個答案,說是在需要控件響應KeyPress事件的時候,父窗體的KeyPreview必須設置為True。
嘗試該方法后無效。
試了一下鍵盤上的其他按鍵,好像KeyPress事件就只是相應普通的字母鍵,數字鍵,空格還有Backspace,其他的好像都不行。最后在網上找到了這樣的解釋:
KeyPress主要用來捕獲數字(注意:包括Shift+數字的符號)、字母(注意:包括大小寫)、小鍵盤等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜單鍵}、{開始鍵}和方向鍵外的ANSI字符
KeyDown 和KeyUp 通常可以捕獲鍵盤除了PrScrn所有按鍵(這里不討論特殊鍵盤的特殊鍵)
KeyPress 只能捕獲單個字符
KeyDown 和KeyUp 可以捕獲組合鍵。
KeyPress 可以捕獲單個字符的大小寫
KeyDown和KeyUp 對於單個字符捕獲的KeyValue 都是一個值,也就是不能判斷單個字符的大小寫。
KeyPress 不區分小鍵盤和主鍵盤的數字字符。
KeyDown 和KeyUp 區分小鍵盤和主鍵盤的數字字符。
其中PrScrn 按鍵KeyPress、KeyDown和KeyUp 都不能捕獲。