我的WPF应用程序处理键盘按键,特别是#和*字符,因为它是一部VoIP电话.
我有一个国际键盘,特别是英国英语键盘的错误.通常我会听3键,如果shift键修改器关闭,我们会触发一个事件来做事情.然而在英国键盘上,这是'£'字符.我发现英国英语键盘有一个专用的'#'键.显然我们可以只听那个特定的键,但这并不能解决美国英语的问题,即shift-3和所有无数其他键盘都把它放在其他地方.
简而言之,我如何通过按键来聆听特定角色,无论是关键组合还是单键并对其作出反应?
我正在尝试将虚拟键码映射到char.
我的代码使用ProcessCmdKey来监听WM_KEYDOWN,这使我可以访问按下的键.例如,当我按单引号时,我得到一个222的密钥,我希望它映射到keychar 39代表...你猜对了......单引号.
我的开发上下文是: - .net Framework 2.0 - UserControl放置在很多地方
你知道问题的答案吗?
我想写一个这样的函数,
public System.Windows.Input.Key ResolveKey(char charToResolve)
{
// Code goes here, that resolves the charToResolve
// in to the Key enumerated value
// (For example with '.' as the character for Key.OemPeriod)
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以写一个巨大的Switch-case来匹配角色,但还有其他方法吗?这个问题是Key枚举的字符串可能与字符不匹配,因此Enum.IsDefined不起作用
有任何想法吗?
更新:这是在Windows环境中
我有System.Windows.Input.KeyEventArgs变量.我想获得真正的焦炭.例如,我按下}键盘上的按钮.通常它返回字符串, oem..但我想得到}char.怎么做 ?
[编辑]我在TextBox中使用它.
我正在尝试System.Windows.Forms.Keys使用以下方法转换为字符串/ char:
KeysConverter converter = new KeysConverter();
string text = converter.ConvertToString(keyCode);
Console.WriteLine(text);
Run Code Online (Sandbox Code Playgroud)
但它返回"OemPeriod"为"." 和"Oemcomma"代表",".有没有办法得到确切的角色?