我在控制台上为shift + number字符获取正确的键击代码时遇到了一些麻烦。例如,使用:
cki = Console.ReadKey(True)
Console.WriteLine("You pressed the '{0}' key.", cki.Key)
如果我按shift + 2,我希望得到ascii 64(对于'@'字符),但我得到50(对于'2'字符)。
现在,我知道你可以获得按下键的修饰符,但这意味着我必须为这样的键编写所有特殊情况,这似乎不对。
我需要这个功能,或类似的东西,因为它能够在按下时读取键,而不需要按回车键,否则我只需要使用console.read。当然我错过了什么。谁能告诉我这是我错过了什么?
答案 0 :(得分:1)
您正在寻找KeyChar
property,它会返回实际字符,而不是按下的物理键
您可能希望将其投射到int
。
答案 1 :(得分:1)
区分键和字符非常重要。世界上任何地方的关键都是一样的,左边是顶行。您可以依赖该密钥始终生成ConsoleKey.D2
然而,角色非常不同,这在很大程度上取决于活动的键盘布局。北美用户按Shift + 2。法国用户按下AltGr + 0。德国用户按下AltGr + Q.西班牙语用户按AltGr + 2。等等。
如果您只关心密钥然后使用ConsoleKeyInfo.Key,则可以对所有非键入键执行此操作,例如功能键。也许是典型的游戏WASD键。如果你只关心角色,比如@,那就使用ConsoleKeyInfo.KeyChar。