Advertisement
FocusedWolf

C#: Simple Console Menu

Oct 19th, 2022 (edited)
1,235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.76 KB | None | 0 0
  1. // Online post: https://pastebin.com/9NmGvV4y
  2.  
  3. // See my more advanced menu here: https://pastebin.com/K4KcHS5u
  4.  
  5. using System;
  6. using System.Diagnostics;
  7.  
  8. namespace ConsoleMenu
  9. {
  10.     internal class Program
  11.     {
  12.         private static void Main(string[] args)
  13.         {
  14.             var indent = " ";
  15.             var outdent = Environment.NewLine + Environment.NewLine;
  16.  
  17.             var selectedIndex = 0;
  18.  
  19.             while (true)
  20.             {
  21.                 Console.Clear();
  22.  
  23.                 // Print a vertical menu.
  24.                 for (var i = 0; i < MENU_OPTIONS.Length; i++)
  25.                 {
  26.                     var menuOption = MENU_OPTIONS[i];
  27.                     WriteMenuEntry(menuOption, i == selectedIndex, indent, outdent);
  28.                 }
  29.  
  30.                 // Print a dividing line.
  31.                 Console.WriteLine(new String('-', 80));
  32.  
  33.                 // Print a horizontal menu.
  34.                 for (var i = 0; i < MENU_OPTIONS.Length; i++)
  35.                 {
  36.                     var menuOption = MENU_OPTIONS[i];
  37.                     WriteMenuEntry(menuOption, i == selectedIndex, indent);
  38.                 }
  39.  
  40.                 Console.WriteLine();
  41.  
  42.                 // Process input.
  43.                 var userInput = Console.ReadKey();
  44.                 switch (userInput.Key)
  45.                 {
  46.                     case ConsoleKey.LeftArrow:
  47.                     case ConsoleKey.UpArrow:
  48.                         // Loop around backwards.
  49.                         selectedIndex = (selectedIndex - 1 + MENU_OPTIONS.Length) % MENU_OPTIONS.Length;
  50.                         break;
  51.  
  52.                     case ConsoleKey.RightArrow:
  53.                     case ConsoleKey.DownArrow:
  54.                         // Loop around forwards.
  55.                         selectedIndex = (selectedIndex + 1) % MENU_OPTIONS.Length;
  56.                         break;
  57.  
  58.                     case ConsoleKey.Enter:
  59.                         ExecuteMenuEntry(selectedIndex);
  60.                         break;
  61.  
  62.                     default:
  63.                         Console.WriteLine($"\n{indent}The pressed key '{userInput.Key}' is not associated with a menu function.");
  64.                         Pause();
  65.                         break;
  66.                 }
  67.             }
  68.         }
  69.  
  70.         private static void WriteMenuEntry(string text, bool highlight, string indent = null, string outdent = null)
  71.         {
  72.             Console.Write(indent);
  73.  
  74.             if (highlight)
  75.             {
  76.                 // Apply selected colors.
  77.                 Console.ForegroundColor = ConsoleColor.Black;
  78.                 Console.BackgroundColor = ConsoleColor.White;
  79.             }
  80.  
  81.             Console.Write(text);
  82.  
  83.             if (highlight)
  84.             {
  85.                 // Restore normal colors.
  86.                 Console.ForegroundColor = ConsoleColor.White;
  87.                 Console.BackgroundColor = ConsoleColor.Black;
  88.             }
  89.  
  90.             Console.Write(outdent);
  91.         }
  92.  
  93.         private static void ExecuteMenuEntry(int index)
  94.         {
  95.             // If exit option is selected.
  96.             if (index == MENU_OPTIONS.Length - 1)
  97.                 Environment.Exit(0);
  98.  
  99.             Console.WriteLine($"\n  Selected index: {index}");
  100.             Pause();
  101.         }
  102.  
  103.         private static void Pause()
  104.         {
  105.             // Press any key to continue.
  106.             if (Debugger.IsAttached == false)
  107.             {
  108.                 Console.WriteLine();
  109.                 Console.Write("Press any key to continue . . . ");
  110.                 Console.ReadKey();
  111.             }
  112.         }
  113.  
  114.         private static readonly string[] MENU_OPTIONS = new string[] {
  115.             " Option 1 ",
  116.             " Option 2 ",
  117.             " Option 3 ",
  118.             " Exit ",
  119.         };
  120.     }
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement