protected void DrawMenu(ConsoleMenu menu) { lock (LockUiObject) { Console.WriteLine(); DrawMenuTitle(menu.Title); if (menu.MenuItems == null) menu.MenuItems = new List<ConsoleMenuItem>(); // loop through items (adjusted for special items like exit) for(var i = 0; i <= menu.MenuItems.Count; i++) { // exit item is first var menuItem = i == 0 ? menu.ExitMenuItem : menu.MenuItems[i - 1]; // default to index value if no selection is provided if (string.IsNullOrWhiteSpace(menuItem.MenuSelection)) menuItem.MenuSelection = i.ToString(); DrawMenuItem(menuItem); } } }
protected ConsoleMenuItem WaitForMenuSelection(ConsoleMenu menu) { lock (LockUiObject) { Console.WriteLine(); Write("{0}> ", ConsoleColor.DarkGray, menu.Title); } var selection = (Console.ReadLine() ?? string.Empty).Trim(); var matchingItem = menu.MenuItems .FirstOrDefault(m => m.MenuSelection.Equals(selection, StringComparison.InvariantCultureIgnoreCase)); if(matchingItem != null) { DrawSystemText(string.Format("Selected: {0}", matchingItem.Label)); Console.WriteLine(); if (matchingItem.Method != null) matchingItem.Method(menu, matchingItem); return matchingItem; } if(selection.Equals(menu.ExitMenuItem.MenuSelection, StringComparison.InvariantCultureIgnoreCase)) { DrawSystemText(string.Format("Selected: {0}", menu.ExitMenuItem.Label)); Console.WriteLine(); return menu.ExitMenuItem; } DrawError("Invalid menu option."); return null; }
public void RunMenu(ConsoleMenu menu) { while (true) { DrawMenu(menu); var selection = WaitForMenuSelection(menu); if (selection == menu.ExitMenuItem) break; } }