我想要做的是根据用户按下的内容更改控制台.
所以我有一个控制台有三个选项,如下所示:
> 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: ...