Меню в консольном приложении - C#
Формулировка задачи:
Доброго времени суток. Вот необходимо сделать интерфейс в консольном приложении. Я его сделал с помощью Switch case, однако вот ту у меня всплыл вопрос. Необходимо сделать так как это было в DOS'е. Т.е. в меню я буду выбирать пункты не вводя цифры 1, 2 и т.д. а с помощью стрелок на клавиатуре (верх вниз). И откровенно говоря я понятия не имею как это сделать. Даже в каком направлении двигаться не знаю...
Решение задачи: «Меню в консольном приложении»
textual
Листинг программы
using System.Text;
using System;
namespace Menu
{
class Program
{
delegate void method();
static void Main(string[] args)
{
string[] items = { "Действие 1", "Действие 2", "Действие 3", "Выход" };
method[] methods = new method[] { Method1, Method2, Method3, Exit};
ConsoleMenu menu = new ConsoleMenu(items);
int menuResult;
do
{
menuResult = menu.PrintMenu();
methods[menuResult]();
Console.WriteLine("Для продолжения нажмите любую клавишу");
Console.ReadKey();
} while (menuResult != items.Length - 1);
}
static void Method1()
{
Console.WriteLine("Выбрано действие 1");
}
static void Method2()
{
Console.WriteLine("Выбрано действие 2");
}
static void Method3()
{
Console.WriteLine("Выбрано действие 3");
}
static void Exit()
{
Console.WriteLine("Приложение заканчивает работу!");
}
}
class ConsoleMenu
{
string[] menuItems;
int counter = 0;
public ConsoleMenu(string[] menuItems)
{
this.menuItems = menuItems;
}
public int PrintMenu()
{
ConsoleKeyInfo key;
do
{
Console.Clear();
for (int i = 0; i < menuItems.Length; i++)
{
if (counter == i)
{
Console.BackgroundColor = ConsoleColor.Cyan;
Console.ForegroundColor = ConsoleColor.Black;
Console.WriteLine(menuItems[i]);
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.White;
}
else
Console.WriteLine(menuItems[i]);
}
key = Console.ReadKey();
if (key.Key == ConsoleKey.UpArrow)
{
counter--;
if (counter == -1) counter = menuItems.Length - 1;
}
if (key.Key == ConsoleKey.DownArrow)
{
counter++;
if (counter == menuItems.Length) counter = 0;
}
}
while (key.Key != ConsoleKey.Enter);
return counter;
}
}
}