Console.ReadKey ();и оператор Switch - использование букв - PullRequest
10 голосов
/ 09 августа 2011

Я пытаюсь сделать программу на C #, которая в основном функционирует на основе клавиши, которую нажимает пользователь (например, X = Quit, D = Disconnect и т. Д .;) с помощью Console.ReadKey (); в с #

Проблема, с которой я сталкиваюсь, заключается в том, как использовать информацию ReadKey в операторе Switch. Может кто-нибудь помочь, пожалуйста? Код ниже.

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 (); Единственное отличие состоит в том, что я хочу активировать функцию, когда вы нажимаете одну клавишу, вместо того, чтобы нажимать клавишу ввода или возможность вводить разные клавиши. Заранее спасибо!

Ответы [ 3 ]

22 голосов
/ 09 августа 2011

Прежде всего, 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. Если вас волнует, является ли буква заглавной / маленькой, вы можете использовать .KeyChar или .Key с .Modifiers, чтобы проверить, была ли нажата клавиша Shift при вводе буквы
12 голосов
/ 09 августа 2011

Вы можете просто принять ввод как:

char input=Console.ReadKey().KeyChar;
1 голос
/ 22 ноября 2016

при использовании 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;
        } 
...