2011-02-13 15 views
5

¿Hay alguna manera mejor de verificar el estado del botón para todos los botones del mouse en vez de buscar otro botón diferente?Compruebe el estado del botón para todos los botones del mouse

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; 
} 

Si no es así, ¿cómo podría hacerlo más elegante sin repetirme tanto?

¡Gracias de antemano!

Respuesta

7

No creo que haya mucho que pueda hacer, excepto refactorizar esto en un método, ya que no hay una colección predefinida para todos los botones. Si desea por completo fuera de la vista se puede utilizar un método de extensión de esta manera:

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; 
     } 
    } 
} 

(No es que alguien pueda comprobar si se pulsan los botones 5 ..)

A continuación, se puede comprobar como esta :

if (mouseEventArgs.CheckUniformButtonState(MouseButtonState.Released)) 
{ 
    return; 
} 
+0

un código mejor sería: 'retorno (e.LeftButton == estado && e.RightButton == estado && e.MiddleButton == estado && e.XButton1 == estado && e.XButton2 == estado); ' –

+0

y tal vez incluso uno más corto:' return (e.LeftButton == e.RightButton == e.MiddleButton == e.XButton1 == e.XButton2 == state); ' –

2
var buttonStates = new [] { 
    mouseEventArgs.LeftButton, 
    mouseEventArgs.MiddleButton, 
    mouseEventArgs.RightButton, 
    mouseEventArgs.XButton1, 
    mouseEventArgs.XButton2}; 

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

Parece que volvería a ser cierto si se lanza un botón en lugar de todos los botones. –

+0

@ H.B. Oops, realmente, actualizado – Snowbear

+0

No es mi -1 por cierto, no soy tan feliz gatillo ... –

Cuestiones relacionadas