Martin Buberl
Martin Buberl

Reputation: 47144

Check the button state for all mouse buttons

Is there a better way to check the button state for all mouse buttons than to check for any different button extra?

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

If not, how could I do it more elegant without repeating myself so much?

Thanks in advance!

Upvotes: 5

Views: 9618

Answers (2)

Snowbear
Snowbear

Reputation: 17274

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

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

Upvotes: 3

brunnerh
brunnerh

Reputation: 184516

I don't think there is much you can do except refactoring this into a method, since there is no predefined collection for all buttons. If you want it completely out of sight you can use an extension method like this:

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

(Not that anyone would ever check if all 5 buttons are pressed..)

Then you can check like this:

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

Upvotes: 7

Related Questions