簡體   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