我试过了:
while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape))
{
// do something
}
这不能帮助我它没有做我需要的东西.. 我的代码是:
Console.WriteLine("Please enter your Login Details:");
Console.Write("User Name: ");
string userName = Console.ReadLine();
Console.Write("Password: ");
string Password = Console.ReadLine();
if (cmd.Login(userName, Password))
{
// my rest of my code
}
我需要在任何console.readline()
如果我按下ESC转到第一个代码或开始输入用户名和密码...
我需要在我的应用程序中按ESC,它会在任何时间和任何阶段重新启动到第一阶段..这可能吗?
答案 0 :(得分:1)
Console.ReadKey()可用于侦听特定按键,例如Escape键。
您可能需要更改方法以使用Console.ReadLine()以外的方法读取用户名和密码输入。请参阅此问题:Using ReadLine() and ReadKey() Simultaneously
答案 1 :(得分:1)
简短的回答是,如果您使用Console.Read
或Console.ReadLine
来获取输入,则无法执行此操作。问题是Read
和ReadLine
阻塞了处理行编辑的调用等(退格,删除,左右移动等)它的缓冲输入。唯一的出路就是按Enter键或杀死程序。 Read
和ReadLine
不对Escape进行任何特殊处理。
我所知道的唯一方法就是使用原始控制台I / O.也就是说,使用Console.ReadKey
读取每个单独的键并显示它,并处理退格,行尾等。这是一个真正的痛苦,很难做到正确。
以下代码接近您想要做的事情。基本上,如果用户输入名称或密码的空白值,则它将返回到顶部。 ESC键将清除一个字段。因此,如果在密码提示下,用户输入" foO"然后点击ESC,该字段将被清空。然后他按Enter键将它带回到开头(即输入名称)。
这不完全是你所要求的,但它可能是你在没有经过多少努力的情况下获得的最好成绩。
private void DoIt()
{
string name;
string pw;
bool done = false;
do
{
Console.WriteLine();
Console.WriteLine("LOGIN");
Console.WriteLine();
Console.Write("User name: ");
name = Console.ReadLine();
if (string.IsNullOrWhiteSpace(name))
{
continue;
}
Console.Write("Password: ");
pw = Console.ReadLine();
if (string.IsNullOrWhiteSpace(pw))
{
continue;
}
done = true;
} while (!done);
Console.WriteLine("Logging in ...");
}