簡體   English   中英

Console.ReadKey();和Switch語句 - 使用字母

[英]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;
}

編輯:

  1. 您也可以使用input.KeyChar來獲取您先嘗試的內容 - 字符,然后您可以根據需要打開它,但是它很難打開不同的鍵,如箭頭等。
  2. 如果你關心,如果字母是大寫/小,你可以使用.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM