2015-10-26 106 views
3

我對C#相當陌生,我很感謝您的貢獻。Combine ConsoleModifiers和ConsoleKey

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

因此,大家可以看到,在一個控制檯應用程序,如果用戶按下Q退出應用程序。精細。現在,問題是:有什麼方法可以合併ConsoleModifiersConsoleKey?而不是使用Q鍵,我寧願在退出時使用Ctrl+Q

我想達到這個目的的原因是,我不覺得舒適只在退出時留下一個按鍵(使得容易防止有人不小心按下它)。儘管語法是完全不正確的,這就是我大致想要實現的: ConsoleModifiers.Control + ConsoleKey.Q

在此先感謝。

回答

3

可以存儲ConsoleKeyInfo變量,並檢查這兩個參數。

ConsoleKeyInfo c; 
while ((c = Console.ReadKey()).Modifiers != ConsoleModifiers.Control 
     || c.Key != ConsoleKey.Q) { } //Exit on Ctrl + Q 
+0

絕對的輝煌,這正是我一直在尋找的!非常感謝你。 – AuroMetal

1

的Console.ReadKey()方法中包含相關信息的微軟的文檔:https://msdn.microsoft.com/en-us/library/471w8d85(v=vs.110).aspx

尤其ConsoleKeyInfo有一個修飾語會員,您可以測試(其中長江基建是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); 
    } 
+0

非常感謝你,這真的值得看看。但在這個特殊的時刻,我想拿@ M.kazem Akhgary的答案。 – AuroMetal

2

這應該這樣做

Func<ConsoleKeyInfo, bool> CheckKey = x => x.Key != ConsoleKey.Q || x.Modifiers != ConsoleModifiers.Control;  
while (CheckKey(Console.ReadKey())) 
{ 

} 

你必須檢查KeyControl財產

+0

使用func的好格式。 +1 –

+0

這真的很棒。謝謝! – AuroMetal