4 回答

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
顯然對(duì)此有很多誤解!
KeyDown和之間的唯一實(shí)際區(qū)別KeyPress是KeyPress中繼按鍵產(chǎn)生的字符,并且只有在有按鍵時(shí)才調(diào)用。
換句話說(shuō),如果您按下A鍵盤,則會(huì)得到以下事件序列:
KeyDown:KeyCode = Keys.A,KeyData = Keys.A,修飾符= Keys.None
KeyPress:KeyChar ='a'
KeyUp:KeyCode = Keys.A
但是,如果按Shift+ A,您將得到:
KeyDown:KeyCode = Keys.ShiftKey,KeyData = Keys.ShiftKey,Shift,修飾符= Keys.Shift
KeyDown:KeyCode = Keys.A,KeyData = Keys.A | Keys.Shift,修飾符= Keys.Shift
KeyPress:KeyChar ='A'
KeyUp:KeyCode = Keys.A
KeyUp:KeyCode = Keys.ShiftKey
如果按住鍵一會(huì),您將得到類似以下內(nèi)容的信息:
KeyDown:KeyCode = Keys.ShiftKey,KeyData = Keys.ShiftKey,Shift,修飾符= Keys.Shift
KeyDown:KeyCode = Keys.ShiftKey,KeyData = Keys.ShiftKey,Shift,修飾符= Keys.Shift
KeyDown:KeyCode = Keys.ShiftKey,KeyData = Keys.ShiftKey,Shift,修飾符= Keys.Shift
KeyDown:KeyCode = Keys.ShiftKey,KeyData = Keys.ShiftKey,Shift,修飾符= Keys.Shift
KeyDown:KeyCode = Keys.ShiftKey,KeyData = Keys.ShiftKey,Shift,修飾符= Keys.Shift
KeyDown:KeyCode = Keys.A,KeyData = Keys.A | Keys.Shift,修飾符= Keys.Shift
KeyPress:KeyChar ='A'
KeyDown:KeyCode = Keys.A,KeyData = Keys.A | Keys.Shift,修飾符= Keys.Shift
KeyPress:KeyChar ='A'
KeyDown:KeyCode = Keys.A,KeyData = Keys.A | Keys.Shift,修飾符= Keys.Shift
KeyPress:KeyChar ='A'
KeyDown:KeyCode = Keys.A,KeyData = Keys.A | Keys.Shift,修飾符= Keys.Shift
KeyPress:KeyChar ='A'
KeyDown:KeyCode = Keys.A,KeyData = Keys.A | Keys.Shift,修飾符= Keys.Shift
KeyPress:KeyChar ='A'
KeyUp:KeyCode = Keys.A
KeyUp:KeyCode = Keys.ShiftKey
請(qǐng)注意,它KeyPress發(fā)生在 KeyDown和之間KeyUp,而不是后面KeyUp,正如許多其他答案所述,KeyPress在不生成字符時(shí)不會(huì)調(diào)用,并且KeyDown在按住鍵時(shí)重復(fù)出現(xiàn),這與許多其他答案相反。
不會(huì)直接導(dǎo)致調(diào)用的鍵示例KeyPress:
Shift,Ctrl,Alt
F1 通過(guò) F12
方向鍵
確實(shí)會(huì)導(dǎo)致調(diào)用的鍵示例KeyPress:
A通過(guò)Z,0通過(guò)9等等。
Spacebar
Tab (KeyChar ='\ t',ASCII 9)
Enter (KeyChar ='\ r',ASCII 13)
Esc (KeyChar ='\ x1b',ASCII 27)
Backspace (KeyChar ='\ b',ASCII 8)
對(duì)于好奇,KeyDown大致關(guān)聯(lián)到WM_KEYDOWN,KeyPress到WM_CHAR和KeyUp到WM_KEYUP。 WM_KEYDOWN 可以調(diào)用的次數(shù)少于鍵重復(fù)的次數(shù),但是它會(huì)發(fā)送一個(gè)重復(fù)計(jì)數(shù),IIRC,WinForms會(huì)使用該計(jì)數(shù)來(lái)精確地生成每個(gè)重復(fù)的KeyDown。

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
KeyPress僅由可打印的字符觸發(fā),并在KeyDown事件后觸發(fā)。根據(jù)鍵入延遲設(shè)置,可以有多個(gè)KeyDown和KeyPress事件,但只有一個(gè)KeyUp事件。
KeyDown
KeyPress
KeyUp

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
KeyPress比KeyDown(和KeyUp)具有更高的抽象級(jí)別。KeyDown和KeyUp與硬件相關(guān):鍵盤上按鍵的實(shí)際操作。KeyPress更是“我從鍵盤上收到了一個(gè)字符”。
- 4 回答
- 0 關(guān)注
- 553 瀏覽
添加回答
舉報(bào)