- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想做的是根据用户按下的内容更改控制台。
所以我有一个包含如下三个选项的控制台:
> Option 1
Option 2
Option 3
基本上,如果用户按下向下箭头,控制台会变成这样:
Option 1
> Option 2
Option 3
如果用户按下向上箭头,控制台会返回到初始状态。
我知道如何使用 Console.ReadKey() 读取用户的输入,但我不知道如何修改已写入的输出。
最后一件事是,当用户按下回车键时,控制台不会创建新行,而是选择其中一个选项并调用委托(delegate)。
最佳答案
使用 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
语句中的 //Do something
行。您应该在此处调用每个选项存在的任何功能。
为了使用所选选项更新“菜单”,清除控制台输出然后重新输出。正确的选项通过 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:
...
关于c# - 根据用户击键更改控制台上的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54469910/
我正在开发一个在 VS 社区 2017 中开发并使用 IIS Express 10 的 .net Core MVVC 项目,我遇到了 TempData 无法在我开发的 3 台计算机中的两台上运行的问题
我是一名优秀的程序员,十分优秀!