[英]Console.ReadKey(); and Switch statement - using letters
我正在嘗試使用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鍵或能夠輸入不同的鍵。 提前致謝!
首先, 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鍵 您可以簡單地將輸入視為:
char input=Console.ReadKey().KeyChar;
使用Console.ReadKey()返回一個struct ConsoleKeyInfo的類型。 所以你需要從這種類型的變量中收到回報。 然后打開包含所有字符的Key枚舉器。
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.