C# 用c语言制作简单的控制台菜单#

C# 用c语言制作简单的控制台菜单#,c#,C#,我想用C语言制作一个简单的菜单,比如: 这样的内容应该从控制台打印出来: FirstOption SecondOption Exit 到目前为止,这是我的代码(命名和封装方面存在问题,但这只是一个快速原型,耗时约30分钟): 这个想法是当点击一个按钮时,菜单项会高亮显示。当一个人来到最后一个菜单项时,他不能再按向下箭头,第一个菜单项和向上箭头也是如此 我完全无法接受这个问题。不,你不能这么做,因为Win32 console不支持这些方法。但是,您可以使用GDI在控制台窗口上绘图。我不完全确定

我想用C语言制作一个简单的菜单,比如: 这样的内容应该从控制台打印出来:

FirstOption 
SecondOption
Exit
到目前为止,这是我的代码(命名和封装方面存在问题,但这只是一个快速原型,耗时约30分钟):

这个想法是当点击一个按钮时,菜单项会高亮显示。当一个人来到最后一个菜单项时,他不能再按
向下箭头
,第一个菜单项和
向上箭头
也是如此


我完全无法接受这个问题。

不,你不能这么做,因为Win32 console不支持这些方法。但是,您可以使用GDI在控制台窗口上绘图。

我不完全确定。。也许这可以帮助你开始

while (true)
        {
            var ch = Console.ReadKey(false).Key;
            switch (ch)
            {
                case ConsoleKey.UpArrow:
                    HighlightStartGame();
                    break;

                case ConsoleKey.DownArrow:
                    HighlightEndGame();
                    break;
            }
        }
static void HighlightStartGame()
    {
        Console.Clear();
        Console.ResetColor();
        StartGame.isChecked = true;
        Console.WriteLine(StartGame);
        EndGame.isChecked = false;
        Console.WriteLine(EndGame);

    }

    static void HighlightEndGame()
    {
        Console.Clear();
        Console.ResetColor();
        StartGame.isChecked = false;
        Console.WriteLine(StartGame);
        EndGame.isChecked = true;
        Console.WriteLine(EndGame);

    }

问题是控制台无法处理任何鼠标事件。您希望如何单击菜单?你将不得不用钥匙做一切事情。您可以选择定义击键(如Ctrl-F或Alt-F表示“FirstEntry”)以激活菜单项,或者使用箭头键实现导航,允许您在字段(按钮或菜单字段和文本字段)之间移动。这不是内置的,所以您必须用代码完成所有工作。您必须使用控制台的
SetCursorPosition
ReadKey
方法才能实现此目的。我记得很久以前在VT100终端上做过这件事。

我已经写了一篇文章。它没有鼠标支持,但它可能仍然是您的起点

CMenu是一个轻量级的、低级的构建控制台的框架 Net中的菜单。而不是手动提示用户输入和 通过对其进行解析,您可以用简短、结构化和 全面的方式,让CMenu处理其余的

CMenu的目标是低开销-简单的东西应该简单易用 实施。如果你不使用某个功能,你不需要知道任何事情 关于它

同时,支持复杂场景。大菜单可以 很容易被分成几个类。背景自我配置。 你不必担心所有令人讨厌的细节 更大的菜单,它只会工作

最重要的是,它使用起来非常简单和快速。命令可以是 简而言之,智能解析器甚至支持部分匹配。帮手 指挥一体化


像这样的东西,但与其他颜色写用户界面的诅咒是真的很难;pIs您不使用WinForms有什么具体原因吗?什么方法?据我所知,它支持他所做的一切。不确定颜色的变化,但我认为这也是可能的。
while (true)
        {
            var ch = Console.ReadKey(false).Key;
            switch (ch)
            {
                case ConsoleKey.UpArrow:
                    HighlightStartGame();
                    break;

                case ConsoleKey.DownArrow:
                    HighlightEndGame();
                    break;
            }
        }
static void HighlightStartGame()
    {
        Console.Clear();
        Console.ResetColor();
        StartGame.isChecked = true;
        Console.WriteLine(StartGame);
        EndGame.isChecked = false;
        Console.WriteLine(EndGame);

    }

    static void HighlightEndGame()
    {
        Console.Clear();
        Console.ResetColor();
        StartGame.isChecked = false;
        Console.WriteLine(StartGame);
        EndGame.isChecked = true;
        Console.WriteLine(EndGame);

    }