c# - .NET Core 控制台应用程序中的交互式、可选择和可滚动项目,如 Yeoman 控制台

标签 c# console-application yeoman interactive .net-core

有人知道如何在控制台中创建有吸引力和可选择的项目吗?

当您将 yeoman 安装为 node.js 包并使用“yo”从命令行调用它时,

他们向我们展示了一个可滚动项目列表,可以使用上下箭头键进行选择。

是否有用于此目的的任何代码或库? (在 .NET 核心中)

enter image description here enter image description here

最佳答案

解决方案的关键部分是:

  • 您可以使用 Console.ReadKey() 来检测箭头键的按下
  • 可以使用Console.CursorTop读写当前光标位置

使用这两个,这里是一个非常简单的代码,可以做你想做的事:

int optionsCount = 5;

int selected = 0;

bool done = false;

while (!done)
{
    for (int i = 0; i < optionsCount; i++)
    {
        if (selected == i)
        {
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.Write("> ");
        }
        else
        {
            Console.Write("  ");
        }

        Console.WriteLine(i);

        Console.ResetColor();
    }

    switch (Console.ReadKey(true).Key)
    {
        case ConsoleKey.UpArrow:
            selected = Math.Max(0, selected - 1);
            break;
        case ConsoleKey.DownArrow:
            selected = Math.Min(optionsCount - 1, selected + 1);
            break;
        case ConsoleKey.Enter:
            done = true;
            break;
    }

    if (!done)
        Console.CursorTop = Console.CursorTop - optionsCount;
}

Console.WriteLine($"Selected {selected}.");

关于c# - .NET Core 控制台应用程序中的交互式、可选择和可滚动项目,如 Yeoman 控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39439673/

相关文章:

c# - 如何在 C# 中从工作线程发布 UI 消息

c# - 如何对从数据库获取数据并将数据保存到文件的方法进行单元测试是否保存正确的数据

c# - C#控制台应用程序,无法隐式将 'double'类型转换为 'string'吗?

c# - 返回 bool 值并重新抛出异常

c# - 例如,如何将 DbSet 变成下拉列表?

c++ - 尝试替换字符串数组的元素,但只能在该位置输入新字符串。 C++

C++ - 国际象棋主教 MoveCode 错误?

Yeoman 'yo webapp' 运行,但目录中没有创建文件

javascript - Yeoman Angular-Fullstack 新路由不重定向

node.js - Yeoman Web 应用程序中没有/bower_components/