WinForm中KeyDown,KeyPress和KeyUp的次序與差別解析。本站提示廣大學習愛好者:(WinForm中KeyDown,KeyPress和KeyUp的次序與差別解析)文章只能為提供參考,不一定能成為您想要的結果。以下是WinForm中KeyDown,KeyPress和KeyUp的次序與差別解析正文
WinForm中的鍵盤按鍵有KeyDown,KeyPress和KeyUp事宜。那末它們的次序和差別在哪裡呢?本文就此作出以下剖析:
1、次序:
依據MSDN所講,三者的次序是:KeyDown>KeyPress>KeyUp.
2、差別:
KeyDown和KeyPress很接近,都是在按鍵按下時刻前後產生。KeyUp是放失落某個鍵以後產生的事宜。
3、KeyDown和KeyPress:
KeyDown的事宜中屬性是KeyEventArgs,個中包括三個主要屬性:
1)KeyCode(前往一個Keys的列舉,可以檢測除ScrollLock和NumLock以外的其它鍵值)。
2)KeyValue(同等於KeyCode,只不外是int類型)。
3)KeyData(這個MSDN沒有說清晰,不太輕易懂得。就我做試驗,實際上是一個檢測Ctrl,Shift或許Alt加其他鍵的時刻(組合鍵!)可以都被檢測出來。絕對而言,1)和2)只能檢測一個鍵值,不克不及檢測組合鍵)。
這裡給出檢測組合鍵的例子(留意,先按下Shift,Alt或許Ctrl,然後其他鍵按下去)
private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData==(Keys.A|Keys.Shift)) { MessageBox.Show("按下了Shift+A!"); } }
平日,KeyUp記載組合鍵的次序必定和KeyDown相反(好比你Shift+A,那末KeyUp中是A+Shift)。不外就檢測組合鍵有關其次序。
其他檢測辦法:
e.Modifiers(只記載Ctrl,Shift和Alt),加e.KeyChar等斷定:
private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.Modifiers == Keys.Shift && e.KeyCode == Keys.A) { MessageBox.Show("按下了Shift+A"); } }
KeyEventArgs本身就有Alt,Control和Shift,是以還可以如許簡化:
private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.Shift && e.KeyCode == Keys.A) { MessageBox.Show("按下了Shift+A"); } }
3)留意!Alt,Control或許Shift有閣下之分。是以檢測閣下的話用第三種辦法弗成能(KeyEventArgs不斷定閣下,可使用1或許2辦法,借助Keys列舉便可)。
4)假如是要做相似“快捷鍵”(比方多窗口窗體,父窗口中按下某組合鍵彈出子窗口,建議把父窗口的KeyPreview設置True,如許窗口比其外部一切的子控件優先獲得事宜觸發)。
5)ShiftKey和Shift的差別:
Shift:不克不及零丁作為斷定應用,必需加別的一個字母鍵作為組合鍵時刻應用。
Shiftkey:零丁按下Shift鍵(沒有其它組合鍵)時刻斷定應用。(同理:LShiftKey和RShiftKey)。