Skip to content

Instantly share code, notes, and snippets.

@trcio
Last active August 29, 2015 14:07
Show Gist options
  • Save trcio/89ed2211f5192988b3c8 to your computer and use it in GitHub Desktop.
Save trcio/89ed2211f5192988b3c8 to your computer and use it in GitHub Desktop.
Easy way to implement menu's into your console program
using System;
using System.Collections.Generic;
namespace ConsoleMenu
{
public class ConsoleMenu
{
private readonly List<MenuOption> Options;
public delegate void ConsoleMenuOptionSelectedEventHandler(ConsoleMenuOptionSelectedEventArgs e);
public event ConsoleMenuOptionSelectedEventHandler ConsoleMenuOptionSelected;
public ConsoleMenu()
{
Options = new List<MenuOption>();
}
public void AddOption(string name)
{
AddOption(name, Console.ForegroundColor);
}
public void AddOption(string name, ConsoleColor titleColor)
{
AddOption(name, titleColor, titleColor);
}
public void AddOption(string name, ConsoleColor selectorColor, ConsoleColor titleColor)
{
AddOption(new MenuOption(name, selectorColor, titleColor));
}
public void AddOption(MenuOption option)
{
Options.Add(option);
}
public void AddOptionRange(IEnumerable<MenuOption> options)
{
Options.AddRange(options);
}
public void PromptMenu()
{
PrintOptions();
var selection = Console.ReadKey(true);
int index;
if (!int.TryParse(selection.KeyChar.ToString(), out index)) return;
index -= 1;
if (index >= Options.Count) return;
if (ConsoleMenuOptionSelected != null)
ConsoleMenuOptionSelected.Invoke(new ConsoleMenuOptionSelectedEventArgs(Options[index]));
}
public void PrintOptions()
{
for (var i = 0; i < Options.Count; i++)
{
var option = Options[i];
Console.ForegroundColor = option.SelectorColor;
Console.Write("{0}: ", i + 1);
Console.ForegroundColor = option.TitleColor;
Console.WriteLine(option.Name);
Console.ResetColor();
}
}
}
public class ConsoleMenuOptionSelectedEventArgs : EventArgs
{
public MenuOption MenuOption { get; private set; }
public ConsoleMenuOptionSelectedEventArgs(MenuOption option)
{
MenuOption = option;
}
}
public class MenuOption
{
public string Name { get; private set; }
public ConsoleColor SelectorColor { get; private set; }
public ConsoleColor TitleColor { get; private set; }
public MenuOption(string name, ConsoleColor selectorColor, ConsoleColor titleColor)
{
Name = name;
SelectorColor = selectorColor;
TitleColor = titleColor;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment