Создание простого консольного меню в С#

Вопрос:Я хочу сделать простое меню на С#, например: что-то вроде этого должно быть напечатано из консоли: FirstOption SecondOption Exit Пока это мой код (есть проблемы с именованием и инкапсуляцией, но это всего лишь быстрый прототип, потраченный ~ 30 минут): using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program {

Вопрос:

Я хочу сделать простое меню на С#, например:
что-то вроде этого должно быть напечатано из консоли:

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.

Я полностью застрял в этом.

Ответ №1

Я не совсем уверен. Может быть, это поможет вам начать.

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); } Ответ №2

Нет, вы не можете просто сделать это, потому что консоль Win32 не поддерживает эти методы. Однако вы можете использовать GDI для рисования в окне консоли.

Ответ №3

Проблема заключается в том, что консоль не может обрабатывать события мыши. Как вы хотите нажать на меню? Вам придется делать все с ключами. Параметры, которые у вас есть, – это либо определить нажатия клавиш (например, Ctrl-F или Alt-F для “FirstEntry” ), чтобы активировать записи меню, либо реализовать навигацию с помощью клавиш со стрелками, позволяя перемещаться по полям (поля кнопок или меню и текстовые поля). Это не встроено, поэтому вам придется делать все в коде. Для этого вам нужно будет использовать методы SetCursorPosition и ReadKey консоли. Я помню, что сделал это на терминале VT100 назад.

Ответ №4

Я написал библиотеку консольных меню для С#. У него нет поддержки мыши, но это может быть отправной точкой для вас?

CMenu – это легкая платформа с низкой ценой для консоли здания меню в .Net. Вместо того, чтобы вручную запрашивать пользователя для ввода и анализируя его, вы определяете команды в короткой, структурированной и всеобъемлющий путь, и пусть CMenu справится с остальными.

CMenu нацелен на низкие накладные расходы – простые вещи должны быть простыми для воплощать в жизнь. Если вы не используете функцию, вам не нужно ничего знать об этом.

В то же время поддерживаются сложные сценарии. Большие меню могут легко разбить на несколько классов. Фоновая самоконфигурация. Вам не нужно беспокоиться обо всех досадных деталях, связанных с более крупные меню, это будет просто работать.

Самое главное, это очень просто и быстро использовать. Команды могут быть сокращенный, интеллектуальный парсер допускает даже частичное совпадение. Помощь команда интегрирована.

Оцените статью
Добавить комментарий