Я знаю, что это старый, но ни один из ответов, кажется, на самом деле не отвечает на вопрос. Причина, по которой возвращается другой символ, заключается в том, что когда вы просто пытаетесь привести его к char
, вы приводите значение enum к 'char'. Однако:
var keyPressed = e.key.ToString();
Отлично работает. Возвращает нажатую клавишу в виде строки. Затем вы проверяете длину. Если это == 1, то это символ, число или символ. Если оно больше 1, это специальный ключ.
Если вам нужен только символ, вы можете сделать keyPressed[0];
Вот как я это делаю.
private void scrollViewer_KeyDown(object sender, KeyEventArgs e)
{
if (!e.IsRepeat)
{
var keyPressed = e.Key.ToString();
if(keyPressed.Length == 1)
CharKeyPressed(keyPressed[0]);
else if(keyPressed.Length > 1)
HandleSpecialKey(keyPressed)
}
}