2011-08-08 47 views
8

我試圖在C#中基於用戶按下的鍵(例如X = Quit,D = Disconnect等;)通過使用Console.ReadKey()基本功能的程序;在c#Console.ReadKey();和Switch語句 - 使用字母

我遇到的問題是如何在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或鍵入不同的按鍵。提前致謝!

回答

17

首先,Convert.ToChar()不適用ConsoleKeyInfo結構,所以這就是爲什麼你有問題,這種轉換會拋出異常。

您不必將密鑰轉換爲字符,而不是,你可以在.Key屬性,它是包含每個鍵可枚舉的切換:

var input = Console.ReadKey(); 

switch (input.Key) //Switch on Key enum 
{ 
    case ConsoleKey.X: 
     break; 
    case ConsoleKey.Y: 
     break; 
} 

編輯:

  1. 你也可以使用input.KeyChar來得到你所嘗試的第一個字符,然後你可以打開它,如果你想,但它很難開啓不同的鍵,如箭頭等
  2. 如果你在乎如果信是capi TAL /小,你可以使用.KeyChar或使用.Key.Modifiers檢查,如果當用戶鍵入的字母
12

,你可以簡單地輸入按下shift鍵:

char input=Console.ReadKey().KeyChar; 
+0

謝謝,這正是我想要的! – CSharpNewGuy

+0

標記爲答案如果這對你有效! – SMK

1

使用Console.ReadKey( )返回一個結構類型的ConsoleKeyInfo。所以你需要從這種類型的變量中接收返回值。 然後打開鑰匙枚舉器,它具有所有字符。

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; 
     }