Вопрос:
Я хочу сделать простое меню на С#, например:
что-то вроде этого должно быть напечатано из консоли:
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 нацелен на низкие накладные расходы – простые вещи должны быть простыми для воплощать в жизнь. Если вы не используете функцию, вам не нужно ничего знать об этом.
В то же время поддерживаются сложные сценарии. Большие меню могут легко разбить на несколько классов. Фоновая самоконфигурация. Вам не нужно беспокоиться обо всех досадных деталях, связанных с более крупные меню, это будет просто работать.
Самое главное, это очень просто и быстро использовать. Команды могут быть сокращенный, интеллектуальный парсер допускает даже частичное совпадение. Помощь команда интегрирована.