2017-03-17 128 views
1

我不明白爲什麼它可以使用一個修飾符和一個鍵,但不是一個修飾符和多個鍵(當Ctr + R + S + V一起按下時)。如果有任何解決方法?KeyDown中的多個鍵

if ((Keyboard.Modifiers == ModifierKeys.Control) 
     && (e.Key == Key.R) 
     && (e.Key == Key.S) 
     && (e.Key == Key.V)) 
{ ... } 
+1

你的意思是你想趕上CTRL + R + S + V,全部壓在一起? – Evk

+1

關鍵是一個變量,它不能同時等於3個不同的值 –

+0

http://stackoverflow.com/a/19013440/6240567 - 這可能會有所幫助 - @ArsenMkrtchyan已經擊中了我的頭,我想。這個答案顯示瞭如何檢測*同時按下多個*鍵:)編輯:下面的Evk的答案(發佈在這個評論的同一時間)是幾乎相同的:) –

回答

3

Key枚舉沒有打上Flags,因此無法容納多個值。並且在該事件參數中只有一個Key屬性,所以只需一個鍵。因此,您的if永遠不會成立,因爲您的&&條件中的3個是互斥的。

你可以做的,而不是是這樣的:

if ((Keyboard.Modifiers == ModifierKeys.Control) 
       && (Keyboard.IsKeyDown(Key.R)) 
       && (Keyboard.IsKeyDown(Key.S)) 
       && (Keyboard.IsKeyDown(Key.V))) { 

} 

注意,如果你想允許在同一時間(所以被壓其他修改鍵,如果你不關心是否都ALT和CONTROL可能會被壓在一起),那麼你應該使用

Keyboard.Modifiers.HasFlag(ModifierKeys.Control) 

改爲。