C# 立即检查按键(控制台应用程序)
C# Check for key press without delay (Console application)
第一次在这里发帖,所以如果我错过了重要的事情,请提前致歉,如果是这样的话,请告诉我!
我正在编写一个控制台应用程序,它有一个菜单,在不同的层次上有几个不同的选项,我正在尝试制作一个功能,当用户在这些菜单中工作时,随时注意是否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;
}
}
}
提前致谢:)
编辑:
可能值得补充的是,调用此代码段的代码看起来像这样,变化非常小;
Console.WriteLine($"1. Add a user\n2. Remove a user \n3. See user info \n \n9. Cancel");
Program.checkForEsc();
int response2 = CheckIfResponseInt(Console.ReadLine());
您需要编写自己的行编辑器而不是使用 Readline。它在下面的 link 中进行了描述。您可能需要添加对其他控制键(例如退格键)的支持,或者添加检查是否仅按下数字键。
第一次在这里发帖,所以如果我错过了重要的事情,请提前致歉,如果是这样的话,请告诉我!
我正在编写一个控制台应用程序,它有一个菜单,在不同的层次上有几个不同的选项,我正在尝试制作一个功能,当用户在这些菜单中工作时,随时注意是否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;
}
}
}
提前致谢:)
编辑:
可能值得补充的是,调用此代码段的代码看起来像这样,变化非常小;
Console.WriteLine($"1. Add a user\n2. Remove a user \n3. See user info \n \n9. Cancel");
Program.checkForEsc();
int response2 = CheckIfResponseInt(Console.ReadLine());
您需要编写自己的行编辑器而不是使用 Readline。它在下面的 link 中进行了描述。您可能需要添加对其他控制键(例如退格键)的支持,或者添加检查是否仅按下数字键。