首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Console.ReadKey();和Switch语句-使用字母

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

Stack Overflow用户
提问于 2011-08-09 07:04:34
回答 3查看 51.3K关注 0票数 15

我正在尝试用C#做一个程序,它基本上是基于用户按下的键(例如:X=退出,D=断开连接等;)在c#中使用Console.ReadKey();

我遇到的问题是如何在Switch语句中使用ReadKey信息。有人能帮帮忙吗?代码如下。

代码语言:javascript
复制
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键或能够键入不同的键。提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2011-08-09 07:09:16

首先,Convert.ToChar()不能在ConsoleKeyInfo结构上工作,所以这就是你有问题的原因,这个转换会抛出一个异常。

您不必将键转换为字符,相反,您可以打开.Key属性,它是一个包含每个键的枚举数:

代码语言:javascript
复制
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一起使用来检查当用户键入字母

<代码>G213时是否按下了shift键

票数 28
EN

Stack Overflow用户

发布于 2011-08-09 07:37:27

您可以简单地将输入作为:

代码语言:javascript
复制
char input=Console.ReadKey().KeyChar;
票数 14
EN

Stack Overflow用户

发布于 2016-11-22 21:34:22

使用Console.ReadKey()返回一个结构ConsoleKeyInfo类型。因此,您需要从该类型接收变量中的返回。然后打开键枚举器,它包含所有字符。

代码语言:javascript
复制
 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;
        } 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6989647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档