[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
В этой статье, рассмотрим 2 способа создания меню: простое и более сложное.
В консольном приложении C# можно создать меню, используя оператор switch и цикл. Ниже приведен пример создания меню:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
static void Main() { while (true) { Console.WriteLine(""" 1. Option 1 2. Option 2 3. Option 3 4. Exit Choose an option: """); string input = Console.ReadLine(); switch (input) { case "1": Console.WriteLine("Option 1 selected"); // code for option 1 break; case "2": Console.WriteLine("Option 2 selected"); // code for option 2 break; case "3": Console.WriteLine("Option 3 selected"); // code for option 3 break; case "4": Console.WriteLine("Exiting program"); return; default: Console.WriteLine("Invalid option"); break; } Console.ReadLine(); Console.Clear(); } } |
В этом примере меню отображается с помощью операторов Console.WriteLine(). Пользователю предлагается выбрать опцию, введя число. Введенные данные считываются с помощью Console.ReadLine(), а затем используется оператор switch для выполнения соответствующего кода для выбранной опции.
Обратите внимание, что цикл while используется для непрерывного отображения меню до тех пор, пока пользователь не решит выйти из программы.
Лучшее меню
Я думаю многим начинающим программистам C#, уже известна такая простая форма меню, давайте определим что-то по интереснее. Для этой задачи, потребуются знания темы «Методы» и «Enum».
В данном примере иллюстрируется удобства определение Enum, который содержит пункты меню:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
/// <summary> /// Menu based enum /// </summary> /// <param name="canCancel"></param> /// <param name="userEnum">Enum enumeration of the user for which we build the menu</param> /// <param name="spacingPerLine">Number of indents between columns</param> /// <param name="optionsPerLine">Number of values in one column</param> /// <param name="startX">Number of indents on the left side of the console</param> /// <param name="startY">Number of indents on the upper side of the console</param> /// <returns></returns> public static int MultipleChoice(bool canCancel, Enum userEnum, int spacingPerLine = 18, int optionsPerLine = 2, int startX = 1, int startY = 1) { int currentSelection = 0; ConsoleKey key; Console.CursorVisible = false; int length = Enum.GetValues(userEnum.GetType()).Length; do { Console.Clear(); for (int i = 0; i < length; i++) { Console.SetCursorPosition(startX + (i % optionsPerLine) * spacingPerLine, startY + i / optionsPerLine); if (i == currentSelection) Console.ForegroundColor = ConsoleColor.Red; Console.Write(Enum.Parse(userEnum.GetType(), i.ToString())); Console.ResetColor(); } key = Console.ReadKey(true).Key; switch (key) { case ConsoleKey.LeftArrow: { if (currentSelection % optionsPerLine > 0) currentSelection--; break; } case ConsoleKey.RightArrow: { if (currentSelection % optionsPerLine < optionsPerLine - 1) currentSelection++; break; } case ConsoleKey.UpArrow: { if (currentSelection >= optionsPerLine) currentSelection -= optionsPerLine; break; } case ConsoleKey.DownArrow: { if (currentSelection + optionsPerLine < length) currentSelection += optionsPerLine; break; } case ConsoleKey.Escape: { if (canCancel) return -1; break; } } } while (key != ConsoleKey.Enter); Console.CursorVisible = true; return currentSelection; } |
Использование данного метода выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
enum ShopMenu { Start, Settings, About, Exit } static void Main() { while (true) { int input = MultipleChoice(true, new ShopMenu()); switch ((ShopMenu)input) { case ShopMenu.Start: Console.WriteLine("Your choice: Start"); break; case ShopMenu.Settings: Console.WriteLine("Your choice: Settings"); break; case ShopMenu.About: Console.WriteLine("Your choice: About"); break; case ShopMenu.Exit: Environment.Exit(0); break; default: break; } Console.ReadLine(); Console.Clear(); } } |
В качестве альтернативы, можно использовать массив или коллекцию, вместо enum.
Я надеюсь, что вам понравилось читать эту статью, и она оказалась легкой для понимания. Пожалуйста, дайте мне знать, если у вас есть какие-либо комментарии или исправления.
Так же вам может быть интересна предыдущая статья — Как сделать пароль звездочками.
Вы хотите научится писать код на языке программирования C#?
Создавать различные информационные системы, состоящие из сайтов, мобильных клиентов, десктопных приложений, телеграмм-ботов и т.д.
Переходите к нам на страницу Dijix и ознакомьтесь с условиями обучения, мы специализируемся только на индивидуальных занятиях, как для начинающих, так и для более продвинутых программистов. Вы можете взять как одно занятие для проработки интересующего Вас вопроса, так и несколько, для более плотной работы. Благодаря личному кабинету, каждый студент повысит качество своего обучения, в вашем распоряжении:
- Доступ к пройденному материалу
- Тематические статьи
- Библиотека книг
- Онлайн тестирование
- Общение в закрытых группах
Живи в своем мире, программируй в нашем.