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:
...
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
