【发布时间】:2010-10-03 23:15:36
【问题描述】:
我想要来自 WPF KeyDown 事件的 e.Key 属性传递的 ASCII 字符。
【问题讨论】:
我想要来自 WPF KeyDown 事件的 e.Key 属性传递的 ASCII 字符。
【问题讨论】:
您可以使用 TextInput 事件而不是 KeyDown 吗? TextCompositionEventArgs 类允许您直接检索通过 e.text 属性输入的文本
private void UserControl_TextInput(
object sender,
System.Windows.Input.TextCompositionEventArgs e)
{
var t = e.Text;
}
【讨论】:
ie shift + i 将显示一个大写字母 I. 将 UserControl_TextInput 附加到主窗口构造函数中的 TextInput 事件并让你的叔叔鲍勃。即:this.TextInput += UserControl_TextInput; 在构造函数中(或在需要的地方)
不幸的是,没有简单的方法可以做到这一点。有 2 种解决方法,但它们都在特定条件下失效。
第一个是将其转换为字符串:
TestLabel.Content = e.Key.ToString();
这将为您提供 CapsLock 和 Shift 等内容,但是对于字母数字键,它无法告诉您当时的 shift 状态等,因此您必须自己想办法。
第二种选择是使用 TextInput 事件,其中 e.Text 将包含实际输入的文本。这将为您提供字母数字键的正确字符,但不会为您提供控制字符。
【讨论】:
根据您的简洁问题,我假设您需要一种方法来获取按下的键的 ASCII 值。这应该工作
private void txtAttrName_KeyDown(object sender, KeyEventArgs e)
{
Console.WriteLine(e.Key.ToString());
char parsedCharacter = ' ';
if (Char.TryParse(e.Key.ToString(), out parsedCharacter))
{
Console.WriteLine((int) parsedCharacter);
}
}
例如如果按 Ctrl + S,您会看到以下输出。
LeftCtrl
S
83
【讨论】:
System.Enum.ToObject(e.Key.GetType(), (byte)e.Key).ToString();
【讨论】: