我是C#
的新手,我很感激你的贡献。
目前,我的代码中有以下一行:
while (Console.ReadKey().Key != ConsoleKey.Q) { } //Exit on Q
正如您所看到的,在控制台应用程序上,如果用户按下Q
,应用程序将退出。精细。现在,问题是:有没有办法合并ConsoleModifiers
加ConsoleKey
?我宁愿在退出时使用Q
,而不是使用Ctrl+Q
密钥。
我之所以想要实现这一目标,是因为我只想在退出时只留下一个键就感觉不舒服(很容易防止有人意外地按下它)。尽管语法完全不正确,但这是我大致想要实现的:
ConsoleModifiers.Control + ConsoleKey.Q
提前致谢。
答案 0 :(得分:3)
您可以将ConsoleKeyInfo存储在变量中并检查这两个参数。
ConsoleKeyInfo c;
while ((c = Console.ReadKey()).Modifiers != ConsoleModifiers.Control
|| c.Key != ConsoleKey.Q) { } //Exit on Ctrl + Q
答案 1 :(得分:2)
这应该做到
Func<ConsoleKeyInfo, bool> CheckKey = x => x.Key != ConsoleKey.Q || x.Modifiers != ConsoleModifiers.Control;
while (CheckKey(Console.ReadKey()))
{
}
您必须检查Key
和Control
属性
答案 2 :(得分:1)
Microsoft的Console.ReadKey()方法文档包含相关信息:https://msdn.microsoft.com/en-us/library/471w8d85(v=vs.110).aspx
特别是,ConsoleKeyInfo有一个你可以测试的Modifiers成员(其中cki是一个ConsoleKeyInfo实例):
if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
完整代码:
public static void Main()
{
ConsoleKeyInfo cki;
// Prevent example from ending if CTL+C is pressed.
Console.TreatControlCAsInput = true;
Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
Console.WriteLine("Press the Escape (Esc) key to quit: \n");
do
{
cki = Console.ReadKey();
Console.Write(" --- You pressed ");
if((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
if((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
Console.WriteLine(cki.Key.ToString());
} while (cki.Key != ConsoleKey.Escape);
}