我正在尝试使用Console.ReadKey()在C#中创建基本上基于用户按下的键(例如X = Quit,D = Disconnect等;)的函数;在c#
我遇到的问题是如何在Switch语句中使用ReadKey信息。有人可以帮忙吗?代码如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Switch_Test
{
class Program
{
static void Main()
{
Console.WriteLine("Welcome. Please enter your command: ");
string chinput;
int input;
bool activated = false;
input = Console.ReadKey();
chinput = Convert.ToChar(input);
switch (chinput)
{
case 'x':
{
Console.WriteLine("You pressed x...");
break;
}
case 'y':
{
Console.WriteLine("You pressed y..");
break;
}
case 'd':
{
if (activated != true)
{
Console.WriteLine("Please activate first!");
break;
}
else
{
Console.WriteLine("Active..");
break;
}
}
case 'a':
{
if (activated != true)
{
activated = true;
Console.WriteLine("Activating..");
break;
}
else
{
activated = false;
Console.WriteLine("Deactivating.");
break;
}
}
default:
Console.WriteLine("Unknown Command.");
break;
}
}
}
}
我知道这可能是错的,但我最初是以Console.ReadLine()开始的; ,唯一的区别是我希望它在您按一个键时激活一个功能,而不是必须按Enter键或能够输入不同的键。提前谢谢!
答案 0 :(得分:21)
首先,Convert.ToChar()
不适用于ConsoleKeyInfo
结构,因此这就是您遇到问题的原因,此转换将引发异常。
您不必将密钥转换为字符,而是可以打开.Key
属性,这是一个包含每个密钥的枚举:
var input = Console.ReadKey();
switch (input.Key) //Switch on Key enum
{
case ConsoleKey.X:
break;
case ConsoleKey.Y:
break;
}
编辑:
input.KeyChar
获取您先尝试的内容 - 字符,然后您可以根据需要打开它,但是很难打开不同的键,如箭头等。.KeyChar
或.Key
与.Modifiers
一起检查用户输入字母时是否按下了shift键答案 1 :(得分:12)
您可以简单地将输入视为:
char input=Console.ReadKey().KeyChar;
答案 2 :(得分:1)
使用Console.ReadKey()返回一个struct ConsoleKeyInfo的类型。所以你需要从这种类型的变量中收到回报。 然后打开Key enumrator,它包含所有字符。
ConsoleKeyInfo chinput = Console.ReadKey();
switch (chinput.Key)
{
case ConsoleKey.X:
{
Console.WriteLine("You pressed x...");
break;
}
case ConsoleKey.Y:
{
Console.WriteLine("You pressed y..");
break;
}
case ConsoleKey.D:
{
if (activated != true)
{
Console.WriteLine("Please activate first!");
break;
}
else
{
Console.WriteLine("Active..");
break;
}
}
case ConsoleKey.A:
{
if (activated != true)
{
activated = true;
Console.WriteLine("Activating..");
break;
}
else
{
activated = false;
Console.WriteLine("Deactivating.");
break;
}
}
default:
Console.WriteLine("Unknown Command.");
break;
}