2011-02-13 70 views
5

有沒有更好的方法來檢查所有鼠標按鈕的按鈕狀態,而不是檢查任何不同的按鈕多餘?檢查所有鼠標按鈕的按鈕狀態

var mouseEventArgs = (System.Windows.Input.MouseEventArgs)e.StagingItem.Input; 

if (mouseEventArgs.LeftButton == MouseButtonState.Released && 
    mouseEventArgs.MiddleButton == MouseButtonState.Released && 
    mouseEventArgs.RightButton == MouseButtonState.Released && 
    mouseEventArgs.XButton1 == MouseButtonState.Released && 
    mouseEventArgs.XButton2 == MouseButtonState.Released) 
{ 
    return; 
} 

如果不是,我怎麼能做得更優雅,不用重複自己這麼多?

在此先感謝!

回答

7

我不認爲有很多你可以做,除了重構這個方法,因爲沒有爲所有按鈕預定義的集合。如果你想讓它完全淡出人們的視線,你可以使用擴展方法是這樣的:

public static class Extensions 
{ 
    public static bool CheckUniformButtonState(this MouseButtonEventArgs e, MouseButtonState state) 
    { 
     switch (state) 
     { 
      case MouseButtonState.Pressed: 
       return (e.LeftButton == MouseButtonState.Pressed && 
        e.RightButton == MouseButtonState.Pressed && 
        e.MiddleButton == MouseButtonState.Pressed && 
        e.XButton1 == MouseButtonState.Pressed && 
        e.XButton2 == MouseButtonState.Pressed); 
      case MouseButtonState.Released: 
       return (e.LeftButton == MouseButtonState.Released && 
        e.RightButton == MouseButtonState.Released && 
        e.MiddleButton == MouseButtonState.Released && 
        e.XButton1 == MouseButtonState.Released && 
        e.XButton2 == MouseButtonState.Released); 
      default: 
       return false; 
     } 
    } 
} 

(不是每個人在沒有檢查是否按下所有的5個按鈕。)

然後你就可以檢查這樣的:

if (mouseEventArgs.CheckUniformButtonState(MouseButtonState.Released)) 
{ 
    return; 
} 
2
var buttonStates = new [] { 
    mouseEventArgs.LeftButton, 
    mouseEventArgs.MiddleButton, 
    mouseEventArgs.RightButton, 
    mouseEventArgs.XButton1, 
    mouseEventArgs.XButton2}; 

if (buttonStates.All(s => s == MouseButtonState.Released)) 
{ 
    return; 
} 
+0

看起來好像它會返回true,如果任何一個按鈕被釋放而不是所有按鈕。 – 2011-02-13 17:21:31

+0

@ H.B。哎呀,真的,更新 – Snowbear 2011-02-13 17:48:13