vb.net或c#.net console.readkey shift + number chars

时间:2013-11-12 17:58:50

标签: c# vb.net ascii console.readkey

我在控制台上为shift + number字符获取正确的键击代码时遇到了一些麻烦。例如,使用:

cki = Console.ReadKey(True)
Console.WriteLine("You pressed the '{0}' key.", cki.Key)

如果我按shift + 2,我希望得到ascii 64(对于'@'字符),但我得到50(对于'2'字符)。

现在,我知道你可以获得按下键的修饰符,但这意味着我必须为这样的键编写所有特殊情况,这似乎不对。

我需要这个功能,或类似的东西,因为它能够在按下时读取键,而不需要按回车键,否则我只需要使用console.read。当然我错过了什么。谁能告诉我这是我错过了什么?

2 个答案:

答案 0 :(得分:1)

您正在寻找KeyChar property,它会返回实际字符​​,而不是按下的物理键 您可能希望将其投射到int

答案 1 :(得分:1)

区分键和字符非常重要。世界上任何地方的关键都是一样的,左边是顶行。您可以依赖该密钥始终生成ConsoleKey.D2

然而,角色非常不同,这在很大程度上取决于活动的键盘布局。北美用户按Shift + 2。法国用户按下AltGr + 0。德国用户按下AltGr + Q.西班牙语用户按AltGr + 2。等等。

如果您只关心密钥然后使用ConsoleKeyInfo.Key,则可以对所有非键入键执行此操作,例如功能键。也许是典型的游戏WASD键。如果你只关心角色,比如@,那就使用ConsoleKeyInfo.KeyChar。