Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Winforms KeyEventArgs.KeyData转换奇怪的返回码,例如';奥姆蒂尔德';和';Oem6';?_C#_.net_Internationalization_Keyboard_Keyevent - Fatal编程技术网

C# 从Winforms KeyEventArgs.KeyData转换奇怪的返回码,例如';奥姆蒂尔德';和';Oem6';?

C# 从Winforms KeyEventArgs.KeyData转换奇怪的返回码,例如';奥姆蒂尔德';和';Oem6';?,c#,.net,internationalization,keyboard,keyevent,C#,.net,Internationalization,Keyboard,Keyevent,我想向用户显示按键或组合的结果。这样做的目的是,我想让用户直观地看到,他们将自己定义为更大程序的一部分,在键盘快捷键中使用了什么组合键。为了进一步澄清,用户点击一个只读文本框,它会自动在该框中显示他们按下的组合键 不幸的是,在我的英国键盘上,例如,当我按下quote键时,.NET Winforms从KeyEventArgs事件中的KeyData属性返回“Oemtilde”。也许对于美国或其他外国键盘来说,这实际上是波浪键,但对于英国用户来说,这看起来当然很奇怪 其他键也会出现奇怪的返回码(例如“

我想向用户显示按键或组合的结果。这样做的目的是,我想让用户直观地看到,他们将自己定义为更大程序的一部分,在键盘快捷键中使用了什么组合键。为了进一步澄清,用户点击一个只读文本框,它会自动在该框中显示他们按下的组合键

不幸的是,在我的英国键盘上,例如,当我按下quote键时,.NET Winforms从
KeyEventArgs
事件中的KeyData属性返回“Oemtilde”。也许对于美国或其他外国键盘来说,这实际上是波浪键,但对于英国用户来说,这看起来当然很奇怪


其他键也会出现奇怪的返回码(例如“Oem6”或“Next”)。如何将这些奇怪的代码转换为用户希望看到的代码?

asp.net?wpf?winforms?这些选项之间的KeyEventArgs不同这是一个XY问题。将虚拟键映射到键入键是一项操作系统工作,它在很大程度上取决于活动键盘布局和进程本地键盘状态。始终使用按键事件,切勿尝试自己执行此操作。如果这是XY,因为你隐藏了一个键盘记录器项目,那么fuggedaboutid,你不能用C#写一个。@HansPassant:目的是让用户看到他们自己定义的键盘快捷键使用了什么组合键。没有比这更无辜的了。不幸的是,KeyPress事件无法处理PageDown这样的特殊键,我需要一种方法将其转换回
类型(因为我的GlobalHotkeys类使用了这些信息)。我永远无法理解我们为什么要猜测这些东西。我们会让你猜ToolStripMenuItem.ShortcutKeys是如何生成可显示字符串的。@HansPassant:对不起,我不太清楚。为了澄清,用户将选择一个自定义热键。他们点击一个文本框,按下他们想要的组合键,文本框将显示他们按下的组合键。这是我见过的选择快捷键/热键的最直观、最通用的方式,尽管我以前只见过一个程序使用它。