2011-08-08 11 views
8

私は、Console.ReadKey()を使用して、ユーザーが押すキー(例:X = Quit、D = Disconnectなど)に基づいて基本的に機能するプログラムをC#で作成しようとしています。 in c#Console.ReadKey();とスイッチステートメント - 文字を使用して

私が実行している問題は、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を使用するか、ユーザーがあなたが単に入力を取ることができ、文字
12

入力されたときにShiftキーが押されたかどうかを確認するために.Modifiers.Keyを使用することができます。

Console.ReadKeyを(使用して
char input=Console.ReadKey().KeyChar; 
+0

ありがとう、これは私が欲しいものです! – CSharpNewGuy

+0

これはあなたのために働く場合、答えとしてマークしてください! – SMK

1

を)は、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; 
     } 
関連する問題