我正在为我的应用程序的快捷方式设置菜单.应用程序支持两种语言(英语和德语),因此我需要能够显示文化依赖的字符串.例如. Ctrl Ins表示“en-US”,而Strg Einfg表示“de-DE”.
考虑到可能的密钥数量不是很大,我可以为每个密钥定义资源,但我认为这个问题并不罕见,并且应该有内置功能或知道库用于此目的.
我从System.Windows.Forms.KeysConverter尝试过ConvertToString():
var kc = new System.Windows.Forms.KeysConverter(); var de = kc.ConvertToString(null,new CultureInfo("de-DE"),Keys.Insert); Console.WriteLine(de);
System.Windows.Input.KeyGesture中的GetDisplayStringForCulture():
System.Windows.Input.KeyGesture kg = new KeyGesture(Key.Insert); var de = kg.GetDisplayStringForCulture(new CultureInfo("de-AT")); Console.WriteLine(de);
但他们两人分别返回英文“Ins”和“Insert”.
所以基本上我正在寻找接受某种标准密钥类和文化并返回各自本地化字符串的方法.
解决方法
我没有时间自己测试它,但你可以尝试下面的方法
参考这两个帖子
(美国英语)
https://msdn.microsoft.com/en-us/library/system.windows.forms.keys(v=vs.110).aspx
(德语)
https://msdn.microsoft.com/de-de/library/system.windows.forms.keys(v=vs.110).aspx
Strg Einfg与之相当
'VB If E.KeyCode = (Keys.Control Or Keys.Insert) Then... //C# if (e.KeyCode == (Keys.Control | Keys.Insert)) {...
要显示当前的输入语言,您可以尝试
MsgBox(InputLanguage.CurrentInputLanguage.LayoutName)