C# 检查所有鼠标按钮的按钮状态

C# 检查所有鼠标按钮的按钮状态,c#,.net,wpf,events,coding-style,C#,.net,Wpf,Events,Coding Style,是否有更好的方法检查所有鼠标按钮的按钮状态,而不是检查任何其他按钮 var mouseEventArgs = (System.Windows.Input.MouseEventArgs)e.StagingItem.Input; if (mouseEventArgs.LeftButton == MouseButtonState.Released && mouseEventArgs.MiddleButton == MouseButtonState.Released &

是否有更好的方法检查所有鼠标按钮的按钮状态,而不是检查任何其他按钮

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;
}
如果不是,我怎么能做得更优雅,而不重复这么多


提前谢谢

我认为除了将其重构为一个方法之外,您没有什么可以做的,因为所有按钮都没有预定义的集合。如果您希望它完全消失在视线之外,可以使用如下扩展方法:

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

if (buttonStates.All(s => s == MouseButtonState.Released))
{
     return;
}
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;
        }
    }
}
if (mouseEventArgs.CheckUniformButtonState(MouseButtonState.Released))
{
    return;
}
(并不是说有人会检查是否所有5个按钮都按下了……)

然后您可以这样检查:

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;
        }
    }
}
if (mouseEventArgs.CheckUniformButtonState(MouseButtonState.Released))
{
    return;
}

如果释放任何一个按钮而不是所有按钮,则返回true。更好的代码是:
return(e.LeftButton==state&&e.RightButton==state&&e.MiddleButton==state&&e.XButton1==state&&e.XButton2==state)甚至更短的一个:
返回(e.LeftButton==e.RightButton==e.MiddleButton==e.XButton1==e.XButton2==state)