3

次のような 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.

私はこれで完全に立ち往生しています。

4

4 に答える 4

2

私は完全に確信していません..これはあなたが始めるのに役立つかもしれません.

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

    }
于 2013-03-17T16:55:59.713 に答える
1

いいえ、Win32 コンソールはこれらのメソッドをサポートしていないため、それを行うことはできません。ただし、GDI を使用してコンソール ウィンドウに描画することはできます。

于 2013-03-17T16:42:31.017 に答える
1

問題は、コンソールがマウス イベントを処理できないことです。どのようにメニューをクリックしますか? キーを使用してすべてを行う必要があります。あなたが持っているオプションは、メニューエントリをアクティブにするためにキーストローク (「FirstEntry」の Ctrl-F または Alt-F など) を定義するか、フィールド (ボタンまたはメニューフィールド) を移動できるように矢印キーでナビゲーションを実装することです。およびテキスト フィールド)。これは組み込まれていないため、コードですべてを行う必要があります。これを行うには、コンソールのSetCursorPositionおよびメソッドを使用する必要があります。ReadKey何年も前に VT100 端末でこれを行ったことを覚えています。

于 2013-03-17T17:02:55.277 に答える
0

C# 用のコンソール メニュー ライブラリを作成しました。マウスのサポートはありませんが、それでも出発点になる可能性はありますか?

CMenu は、.Net でコンソール メニューを構築するための、軽量で控えめなフレームワークです。ユーザーに手動で入力を求めて解析する代わりに、短く構造化された包括的な方法でコマンドを定義し、残りは CMenu に処理させます。

CMenu は低オーバーヘッドを目指しています - シンプルなものは実装が簡単であるべきです。機能を使用しない場合は、それについて何も知る必要はありません。

同時に、複雑なシナリオがサポートされます。大きなメニューは、簡単にいくつかのクラスに分割できます。バックグラウンドの自己構成。より大きなメニューに関連するすべての面倒な詳細について心配する必要はありません。それは機能します。

最も重要なことは、非常にシンプルで高速に使用できることです。コマンドは省略可能で、スマート パーサーにより部分一致も可能です。ヘルプ コマンドが統合されています。

于 2016-01-28T11:58:46.150 に答える