ESC键在C#控制台应用程序中

时间:2016-01-29 20:34:24

标签: c# visual-studio console-application

我试过了:

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,它会在任何时间和任何阶段重新启动到第一阶段..这可能吗?

2 个答案:

答案 0 :(得分:1)

Console.ReadKey()可用于侦听特定按键,例如Escape键。

您可能需要更改方法以使用Console.ReadLine()以外的方法读取用户名和密码输入。请参阅此问题:Using ReadLine() and ReadKey() Simultaneously

答案 1 :(得分:1)

简短的回答是,如果您使用Console.ReadConsole.ReadLine来获取输入,则无法执行此操作。问题是ReadReadLine阻塞了处理行编辑的调用等(退格,删除,左右移动等)它的缓冲输入。唯一的出路就是按Enter键或杀死程序。 ReadReadLine不对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 ...");
    }