检查所有鼠标按钮的按钮状态
问题描述:
有没有更好的方法来检查所有鼠标按钮的按钮状态,而不是检查任何不同的按钮多余?检查所有鼠标按钮的按钮状态
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;
}
如果不是,我怎么能做得更优雅,不用重复自己这么多?
在此先感谢!
答
我不认为有很多你可以做,除了重构这个方法,因为没有为所有按钮预定义的集合。如果你想让它完全淡出人们的视线,你可以使用扩展方法是这样的:
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;
}
答
var buttonStates = new [] {
mouseEventArgs.LeftButton,
mouseEventArgs.MiddleButton,
mouseEventArgs.RightButton,
mouseEventArgs.XButton1,
mouseEventArgs.XButton2};
if (buttonStates.All(s => s == MouseButtonState.Released))
{
return;
}
看起来好像它会返回true,如果任何一个按钮被释放而不是所有按钮。 – 2011-02-13 17:21:31
@ H.B。哎呀,真的,更新 – Snowbear 2011-02-13 17:48:13