【问题标题】:C# Check for key press without delay (Console application) [duplicate]C#立即检查按键(控制台应用程序)[重复]
【发布时间】:2021-12-16 07:22:13
【问题描述】:

第一次在这里发帖,如果我错过了重要的事情,请提前道歉,如果是这样,请告诉我!

我正在编写一个控制台应用程序,它的菜单在不同的层中有几个不同的选项,我正在尝试创建一个功能,当用户在这些菜单中工作时,随时注意 Esc 键被按下。为了让我的代码不那么混乱,我编写了一个单独的方法,当我要求输入时,我可以在任何时候简单地调用它(比如选择,或者在表单中输入信息等)。 我遇到的问题是它总是取消第一次按键。如果用户输入要在菜单中移动的数字,则不会输入数字,如果他们在表单中输入名称,则缺少第一个字母等。 有没有办法解决这个问题?

目前的代码是这样的;

public static void checkForEsc()
    {
        ConsoleKeyInfo key = Console.ReadKey(true);

        if (key.Key == ConsoleKey.Escape)
        {
            switch (currentUserisAdmin)
            {
                case true:
                    Menu.AdminMenu();
                    break;

                case false:
                    Menu.CustomerMenu();
                    break;
            }
        }
    }

提前致谢:)

编辑:

可能值得补充的是,调用这个 sn-p 的代码看起来像这样,变化非常小;

Console.WriteLine($"1. Add a user\n2. Remove a user \n3. See user info \n \n9. Cancel");
Program.checkForEsc();
int response2 = CheckIfResponseInt(Console.ReadLine());

【问题讨论】:

    标签: c# console-application


    【解决方案1】:

    您需要编写自己的行编辑器,而不是使用 Readline。它在下面的链接中描述。您可能需要添加对其他控制键(例如退格)的支持,或者添加检查是否仅按下了数字键。

    Listen on ESC while reading Console line

    【讨论】:

      猜你喜欢
      • 2014-09-04
      • 2012-09-13
      • 2013-12-07
      • 2020-10-16
      • 1970-01-01
      • 2020-11-29
      • 2012-08-28
      • 2011-02-01
      相关资源
      最近更新 更多