在KeyDown事件中,我使用了KeyEventArgs。它有(其中包括)這三個屬性:C#:在KeyDown事件中,我應該使用什麼來檢查關鍵點是否失效?
e.KeyCode
e.KeyData
e.KeyValue
哪一個我應該用什麼呢?
在KeyDown事件中,我使用了KeyEventArgs。它有(其中包括)這三個屬性:C#:在KeyDown事件中,我應該使用什麼來檢查關鍵點是否失效?
e.KeyCode
e.KeyData
e.KeyValue
哪一個我應該用什麼呢?
編輯:不知何故,我誤解了你的問題,包括檢查一個有效的字符。你修改了嗎?我已經添加了每個的描述。
如果你只是需要t他的角色,我可能會推薦使用KeyPress事件並使用KeyPressEventArgs。 KeyChar財產。然後,您可以使用Char.IsLetterOrDigit()來確定它是否是有效的字符。
或者,您可能可以將KeyEventArgs.KeyCode轉換爲char,然後使用Char.IsLetterOrDigit。
我會建議使用KeyCode
屬性來檢查大多數操作的Keys
枚舉。但是,下面的一些基本差異可能會幫助您更好地確定您需要哪種情況。
差異:
KeyCode
- 表示,表示目前狀態爲Down鍵的Keys
枚舉值。
KeyData
- 同KeyCode
,除了它具有在改性劑的形式的附加信息 - 移位/ Ctrl鍵/ ALT等
KeyValue
- 所述KeyCode
的數值。
非常基本使用的KeyDown
的private void tbSomeText_KeyDown (object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.B && e.Modifiers != Keys.Shift) {
MessageBox.Show("You Pressed b");
}
else if (e.KeyCode == Keys.A && e.Modifiers == Keys.Shift) {
MessageBox.Show("You Pressed Shift+A");
}
}
使用KeyPressed事件。
引用MSDN:
甲KeyPressEventArgs指定當用戶按下一個鍵,它由該字符。例如,當用戶按下SHIFT + K,作爲keyChar屬性返回一個大寫字母K.
這樣你就不需要更動e.KeyCode
, e.KeyData
和 e.KeyValue
。
我不同意......你假設用戶不想捕捉任何修飾符,並且他的輸入僅限於鍵盤ASCII。 – Cerebrus 2009-02-19 08:10:32
IsLetterOrDigit僅適用於ascii? – Svish 2009-02-19 08:11:58
如果字符不是拉丁文,IsLetterOrDigit使用CharUnicodeInfo.GetUnicodeCategory。 – 2009-02-19 08:32:03