组合ConsoleModifiers和ConsoleKey

时间:2015-10-26 12:26:32

标签: c# console

我是C#的新手,我很感激你的贡献。

目前,我的代码中有以下一行: while (Console.ReadKey().Key != ConsoleKey.Q) { } //Exit on Q

正如您所看到的,在控制台应用程序上,如果用户按下Q,应用程序将退出。精细。现在,问题是:有没有办法合并ConsoleModifiersConsoleKey?我宁愿在退出时使用Q,而不是使用Ctrl+Q密钥。

我之所以想要实现这一目标,是因为我只想在退出时只留下一个键就感觉不舒服(很容易防止有人意外地按下它)。尽管语法完全不正确,但这是我大致想要实现的: ConsoleModifiers.Control + ConsoleKey.Q

提前致谢。

3 个答案:

答案 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()))
{

}

您必须检查KeyControl属性

答案 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);
    }