从Key获取Char

时间:2011-09-06 08:05:19

标签: c# wpf keydown text-editor

我正在编写自定义文本编辑器,我使用KeyDown和KeyUp事件。该事件从包含“Key”实例的参数中获取KeyEventArgs。

如何将“Key”转换为真正的char?

将Key.ToString()与“。”一起使用。我得到一个“OmePeriod”或“,”我得到一个“OmeComma”。我可以直接转换这些值...但这是一项艰苦的工作,我确信必须存在任何将Key转换为真正的“char”的类。

谢谢!

问候。

5 个答案:

答案 0 :(得分:5)

这里的主要问题是你捕获的事件是卷轴键盘事件,而键确实是键而不是字符。中间是键盘图!例如,当键入shift-A时,您将收到两个事件,而不是一个用于按键的事件。

此讨论可以提供帮助:C# How to translate virtual keycode to char?

答案 1 :(得分:5)

请尝试使用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

答案 2 :(得分:3)

这可以为您提供所需的内容......也就是键盘代码中的区域设置特定字符...

how to capture the '#' character on different locale keyboards in WPF/C#?

答案 3 :(得分:0)

答案 4 :(得分:-4)

将e.KeyValue转换为char。例如:

例如

private void myTextBox_KeyDown(object sender, KeyEventArgs e)
{
    char pressedCharacter = (char)e.KeyValue;
}