繁体   English   中英

在c#中创建简单的控制台菜单

[英]Making simple console menu in c#

我想在C#中创建一个简单的菜单:这样的东西应该从控制台打印出来:

FirstOption 
SecondOption
Exit

到目前为止,这里是我的代码(命名和封装存在问题,但这只是快速原型,花了大约30分钟):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Menu StartGame = new Menu("Start Game");
            Menu EndGame = new Menu("End Game");
            Console.WriteLine(StartGame);
            Console.WriteLine(End Game);
            EndGame.isChecked = false;
        }
    }

    class Menu
    {
        private string Content;
        public bool isChecked = true;

        public Menu(string Content)
        {
            this.Content = Content;
        }
        public void CheckCondition()
        {
            if (isChecked)
            {
                Console.BackgroundColor = ConsoleColor.White;
                Console.ForegroundColor = ConsoleColor.Black;
            }
            else
            {
                Console.ResetColor();
            }
        }
        public override string ToString()
        {
            this.CheckCondition();
            return this.Content;
        }
    }
}

这个想法是当点击一个按钮时,菜单项突出显示。 当一个人到达最后一个菜单项时,他无法再次按下DownArrow ,第一个项目和UpArrow

我完全坚持这个。

我不完全确定..可能这可以帮助你开始。

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);

    }

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

问题是控制台无法处理任何鼠标事件。 你想如何点击菜单? 你必须用钥匙做所有事情。 您可以选择定义击键(如Ctrl-F或Alt-F表示“FirstEntry”)以激活菜单项,或使用箭头键实现导航,允许您在字段(按钮或菜单字段)中移动和文本字段)。 这不是内置的,因此您必须在代码中执行所有操作。 您必须使用控制台的SetCursorPositionReadKey方法才能实现此目的。 我记得曾经在VT100终端上做过这个。

为C#编写了一个控制台菜单库 它没有鼠标支持,但它可能仍然是你的起点?

CMenu是一个轻量级,低仪式的框架,用于在.Net中构建控制台菜单。 您可以以简短,结构化和全面的方式定义命令,而不是手动提示用户输入和解析它,让CMenu处理其余的命令。

CMenu旨在降低开销 - 简单的东西应该易于实现。 如果您不使用某项功能,则无需了解任何相关信息。

同时,支持复杂的方案。 大菜单可以轻松分成几个类。 背景自我配置。 您不必担心较大菜单中涉及的所有烦人细节,它只会起作用。

最重要的是,它使用起来非常简单快捷。 命令可以缩写,智能解析器甚至可以进行部分匹配。 集成了帮助命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM