我正在编写自定义文本编辑器,并使用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