【问题标题】:Interactive, Selectable and scrollable Items in Console Application in .NET Core like Yeoman console.NET Core 中的控制台应用程序中的交互式、可选择和可滚动项,如 Yeoman 控制台
【发布时间】:2016-09-11 19:08:22
【问题描述】:

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

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

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

是否有为此目的的任何代码或库? (在 .NET Core 中)

【问题讨论】:

  • 控制台并不是真正意义上的交互式。在最近的版本(Windows 10、Server 2012 R2)中,控制台对用户更加友好,但交互仍然像大多数其他终端一样:输入并按 Enter。对于您想要的内容,请参阅有关将某种多行文本块拍到 Windows 表单/wpf 表单并进行相应格式化的信息。
  • @jdl134679 那么 Yeoman 是如何做到这一点并成功运作的?

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


【解决方案1】:

解决方案的关键部分是:

  • 您可以使用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}.");

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2014-10-21
    • 1970-01-01
    • 2017-01-25
    相关资源
    最近更新 更多