Get Char from Key
I am coding a custom text editor, and I use KeyDown and KeyUp events. That events gets a KeyEventArgs from parameters where a "Key" instance is included.
How I can transform that "Key" to a real char?
Using Key.ToString() with a "." I get a "OmePeriod" or with "," I get a "OmeC开发者_如何转开发omma". I can transform that values directly...but It is a hard work, and I am sure that must exist any class that transform that Keys to the real "char".
Thanks!
Regards.
The main problem here is that the event you are catching is reel keyboard event and that the key is indeed a key and NOT a character. In between is the keymap ! For example, when typing shift-A, you will receive two event instead of one for keypressed.
this discussion can help : C# How to translate virtual keycode to char?
Instead of using the KeyDown
event, try using the TextInput
event. Attach an event handler that looks like this:
private void Grid_TextInput(object sender, TextCompositionEventArgs e)
{
Char keyChar = (Char)System.Text.Encoding.ASCII.GetBytes(e.Text)[0];
Debug.WriteLine(keyChar);
}
Note, this grabs only the first byte, and this will not work for international (Unicode) text. It may not work for more complex text input events either, so be advised!
See this MSDN article for some more info.
This gives you exactly what you need .... that too locale specific character from the Keyboard's Key code ...
how to capture the '#' character on different locale keyboards in WPF/C#?
Use the KeyEventArgs.Key property and the following: How to convert a character in to equivalent System.Windows.Input.Key Enum value, but instead use the following: KeyInterop.VirtualKeyFromKey Method
Cast the e.KeyValue to char. like example:
eg.
private void myTextBox_KeyDown(object sender, KeyEventArgs e)
{
char pressedCharacter = (char)e.KeyValue;
}
精彩评论