【问题标题】:ESC Key in C# console applicationC# 控制台应用程序中的 ESC 键
【发布时间】:2016-01-29 20:34:23
【问题描述】:

我试过了:

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 
}

如果我按 ESC 键,我在任何 console.readline() 中需要什么转到第一个代码或开始输入用户名和密码... 我需要在我的应用程序中按 ESC,它会在任何时候和任何阶段重新启动到第一阶段.. 这可能吗?

【问题讨论】:

标签: c# visual-studio console-application


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    简短的回答是,如果您使用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 ...");
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 2011-05-20
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      相关资源
      最近更新 更多