cki = Console.ReadKey(true);
if (cki.Key == ConsoleKey.Escape) break;
var choice = Console.ReadLine();
switch (choice)
{
case "1":
Console.WriteLine("1");
break;
case "2":
Console.WriteLine("2");;
break;
case "3":
Console.WriteLine("3");
break;
}
Проблема в том, что при попытки ввести допустим "1", приходится нажимать дважды на клавишу. Я подозреваю,что это из-за подряд идущих Console.ReadKey и Console.ReadLine. Как можно исправить эту проблему?
Ответ
Единственный вариант, который я вижу, — создать свою альтернативу Console.ReadLine(), которая будет реагировать не только на Enter, но и на Escape:
///
for (;;) { ConsoleKeyInfo info = Console.ReadKey(true);
switch (info.Key) { case ConsoleKey.Enter: Console.WriteLine(); return builder.ToString();
case ConsoleKey.Escape: return null;
default: Console.Write(info.KeyChar); builder.Append(info.KeyChar); break; } } } }
Использование в вашем случае будет таким:
string choice = ConsoleEx.TryReadLine();
switch (choice) { case "1": case "2": case "3": Console.WriteLine(choice); break; case null: // Handle ESC here. break; default: Console.WriteLine("Invalid input"); break; }
Комментариев нет:
Отправить комментарий