15 Stimmen

Console.ReadKey(); und Switch-Anweisung - mit Buchstaben

Ich versuche, ein Programm in C#, die im Grunde Funktionen auf der Grundlage der Taste ein Benutzer drückt (ex. X = Quit, D = Disconnect, etc;) durch die Verwendung von Console.ReadKey() zu machen; in c#

Das Problem, auf das ich stoße, ist, wie man die ReadKey-Informationen in einer Switch-Anweisung verwendet. Kann mir bitte jemand helfen? Der Code ist unten.

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

        }
    }
}

Ich weiß, das ist wahrscheinlich wirklich falsch, aber ich begann ursprünglich mit Console.ReadLine();, der einzige Unterschied ist, ich möchte es eine Funktion zu aktivieren, wenn Sie eine einzelne Taste drücken, anstatt mit Enter oder in der Lage, in verschiedenen Tasten eingeben. Vielen Dank im Voraus!

28voto

Marcin Deptuła Punkte 11521

Zuallererst, Convert.ToChar() funktioniert nicht bei ConsoleKeyInfo Struktur, deshalb haben Sie Probleme, diese Konvertierung wird eine Exception auslösen.

Sie müssen Ihren Schlüssel nicht in Zeichen umwandeln, sondern können stattdessen die .Key Eigenschaft, die eine Aufzählung ist, die jeden Schlüssel enthält:

var input = Console.ReadKey();

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

Editer :

  1. Sie können auch Folgendes verwenden input.KeyChar um das zu bekommen, was du zuerst probiert hast - das Zeichen, dann kannst du es einschalten, wenn du willst, aber es ist schwierig, andere Tasten wie Pfeile usw. einzuschalten.
  2. Wenn es Ihnen wichtig ist, ob ein Buchstabe groß/klein ist, können Sie .KeyChar oder verwenden .Key con .Modifiers um zu prüfen, ob die Umschalttaste gedrückt wurde, als der Benutzer den Buchstaben eingegeben hat

14voto

SMK Punkte 2068

Sie können die Eingabe einfach als:

char input=Console.ReadKey().KeyChar;

1voto

Ahmed Fotouh Punkte 11

Mit Console.ReadKey() gibt einen Typ einer Struktur ConsoleKeyInfo zurück. Sie müssen also die Rückgabe in einer Variablen dieses Typs empfangen. Dann schalten Sie den Key-Enumrator ein, der alle Zeichen enthält.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X