[这不是重复,因为我的问题不同;我不想关闭我的计划而且我不想在主代码中使用Console.ReadKey()
!]
如果用户按下例如,我想退出程序的当前菜单(不要结束!) "逃生"但我不想在代码正文中使用Console.ReadKey
。
我先告诉你我的代码:
while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape))
{
string input = Console.ReadLine();
// if(input == // ... and so on
// rest of code
}
这就是我的想法。但问题是,由于ReadLine,按下Escape不会让我退出while循环。我想离开循环WHENEVER我按下一个特定的键。可能在Console.ReadLine()
处于活跃状态或其他状态时,它并不重要。
有一种简单的方法吗?
答案 0 :(得分:1)
您可以编写自己的 ReadLine 。
如果按下ESC,此代码将返回null,否则用户输入字符串..
static string ReadLine()
{
StringBuilder sb = new StringBuilder();
while(true)
{
var keyInfo = Console.ReadKey(true);
if (keyInfo.Key == ConsoleKey.Escape) return null;
if (keyInfo.Key == ConsoleKey.Enter)
{
Console.WriteLine();
return sb.ToString();
}
if (keyInfo.Key == ConsoleKey.Backspace && sb.Length > 0)
{
Console.Write(keyInfo.KeyChar + " " + keyInfo.KeyChar);
sb.Length--;
continue;
}
if (Char.IsControl(keyInfo.KeyChar)) continue;
Console.Write(keyInfo.KeyChar);
sb.Append(keyInfo.KeyChar);
}
}