c# – 根据用户击键更改控制台上的字符

我想要做的是根据用户按下的内容更改控制台.

所以我有一个控制台有三个选项,如下所示:

>  Option 1

Option 2

Option 3

基本上,如果用户按下向下箭头,控制台将如下所示:

Option 1

>  Option 2

Option 3

如果用户按下向上箭头,控制台将返回其初始状态.

我知道如何使用Console.ReadKey()读取用户的输入,但我不知道如何修改已经写入的输出.

最后一点是,当用户按Enter键时,控制台不会创建新行,而是选择其中一个选项并调用委托.

解决方法

使用Console.ReadKey和一些变量来保持所选选项的状态并不难实现.

以下代码是您正在寻找的非常快速和懒惰的实现.花点时间自己正确地重写它 – 这是为了让你了解如何实现你想要的东西.

static void Main(string[] args)
{
    bool IsRunning = true;
    int Selected = 1;

    while (IsRunning)
    {
        ConsoleKeyInfo NextKey = new ConsoleKeyInfo();

        if (Selected < 1)
            Selected = 3;
        else if (Selected > 3)
            Selected = 1;

        Console.Clear();
        if (Selected == 1)
            Console.Write("> ");
        Console.WriteLine("Option 1");
        Console.WriteLine();
        if (Selected == 2)
            Console.Write("> ");
        Console.WriteLine("Option 2");
        Console.WriteLine();
        if (Selected == 3)
            Console.Write("> ");
        Console.WriteLine("Option 3");
        Console.WriteLine();
        Console.Write("Choose an option (Q to Quit): ");

        while (!(NextKey.Key == ConsoleKey.DownArrow ||
                NextKey.Key == ConsoleKey.UpArrow ||
                NextKey.Key == ConsoleKey.Q ||
                (NextKey.KeyChar >= '1' &&
                NextKey.KeyChar <= '3')))
        {
            NextKey = Console.ReadKey();
        }

        switch (NextKey.Key)
        {
            case ConsoleKey.D1:
                // Do something
                break;

            case ConsoleKey.D2:
                // Do something
                break;

            case ConsoleKey.D3:
                // Do something
                break;

            case ConsoleKey.DownArrow:
                Selected++;
                break;

            case ConsoleKey.UpArrow:
                Selected--;
                break;

            case ConsoleKey.Q:
                IsRunning = false;
                break;
        }
    }
}

代码将循环,而“Q”键尚未被按下以退出应用程序.

按下向下或向上箭头将旋转可用选项.

在按下1,2或3时,您将导致//在switch语句中执行某些行.您应该在此处调用每个选项存在的任何功能.

为了使用所选选项更新“菜单”,将清除控制台输出,然后重新输出.通过Selected变量识别正确的选项.

还有其他几种方法可以实现上述方法,有些方面更为整洁.我想告诉你从哪里开始.我并不是说这是最好或最整洁的解决方案.

编辑

出现了一个想法 – 您想使用Enter来选择该选项.

我已经修改了一些代码以提供该功能:

while (!(NextKey.Key == ConsoleKey.DownArrow ||
            NextKey.Key == ConsoleKey.UpArrow ||
            NextKey.Key == ConsoleKey.Q ||
            NextKey.Key ==  ConsoleKey.Enter))
    {
        NextKey = Console.ReadKey();
    }

    switch (NextKey.Key)
    {
        case ConsoleKey.Enter:
            // Do something depending on Selected option
            switch (Selected)
            {
                case 1:
                    // Do something
                    break;

                case 2:
                    // Do something
                    break;

                case 3:
                    // Do something
                    break;
            }
            break;

        case ConsoleKey.DownArrow:
        ...

相关文章

项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件...
简介 本文的初衷是希望帮助那些有其它平台视觉算法开发经验的...
这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期...
在C#中的使用JSON序列化及反序列化时,推荐使用Json.NET——...
事件总线是对发布-订阅模式的一种实现,是一种集中式事件处理...
通用翻译API的HTTPS 地址为https://fanyi-api.baidu.com/api...