我正在編寫自定義文本編輯器,並使用KeyDown和KeyUp事件。該事件從包含「Key」實例的參數中獲取KeyEventArgs。從密鑰獲取字符
我如何將這個「鑰匙」轉換成真正的字符?
使用帶有「。」的Key.ToString()我得到一個「OmePeriod」或「,」我得到一個「OmeComma」。我可以直接轉換這些值......但這是一項艱苦的工作,我相信必須存在任何將這些Keys轉換爲真正的「字符」的類。
謝謝!
問候。
我正在編寫自定義文本編輯器,並使用KeyDown和KeyUp事件。該事件從包含「Key」實例的參數中獲取KeyEventArgs。從密鑰獲取字符
我如何將這個「鑰匙」轉換成真正的字符?
使用帶有「。」的Key.ToString()我得到一個「OmePeriod」或「,」我得到一個「OmeComma」。我可以直接轉換這些值......但這是一項艱苦的工作,我相信必須存在任何將這些Keys轉換爲真正的「字符」的類。
謝謝!
問候。
這裏的主要問題是你正在捕捉的事件是卷軸鍵盤事件,而且鍵確實是鍵而不是字符。在之間是鍵盤圖!例如,當鍵入shift-A時,您將收到兩個事件,而不是一個用於keypressed的事件。
使用KeyDown
事件相反的,請嘗試使用TextInput
事件。附加的事件處理程序看起來像這樣:
private void Grid_TextInput(object sender, TextCompositionEventArgs e)
{
Char keyChar = (Char)System.Text.Encoding.ASCII.GetBytes(e.Text)[0];
Debug.WriteLine(keyChar);
}
注意,這僅僅抓住的第一個字節,而這不會對國際(Unicode)的文本。它可能不適用於更復雜的文本輸入事件,所以建議!
有關更多信息,請參閱this MSDN article。
有很多在wpf中捕獲textinput的問題,有些答案甚至涉及到系統dll。但你的答案是迄今爲止我所見過的最好的 – jflepp
這給你正是你需要的....從鍵盤的鍵碼太區域特定的字符...
how to capture the '#' character on different locale keyboards in WPF/C#?
謝謝!這是我一直在尋找的! –
鑄e.KeyValue爲char。例如:
例如。
private void myTextBox_KeyDown(object sender, KeyEventArgs e)
{
char pressedCharacter = (char)e.KeyValue;
}
沒有e.KeyValue – MSL
這就是我追求我的目的。感謝您的有用答案! –
我剛剛意識到這可能會返回不好的結果,可能根本不應該使用。當我使用這個時,我點擊了NumberPad 8鍵,它顯示爲KeyData和KeyCode,其鍵值爲104。另一方面,當使用'(char)e.KeyValue'時,值'104'轉換爲字符'h'而不是'8'! –
它已經討論http://stackoverflow.com/questions/7103360/how-to-get-pressed-char-from-system-windows-input-keyeventargs – Samich
我認爲答案爲http:// stackoverflow.com/questions/544141/how-to-convert-a-character-in-to-equivalent-system-windows-input-key-enum-value問題可能會有幫助。 – Dmitriy
可能重複[C#如何將虛擬鍵碼轉換爲char?](http://stackoverflow.com/questions/318777/c-sharp-how-to-translate-virtual-keycode-to-char) – bummi