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;
}
Комментариев нет:
Отправить комментарий