模拟鼠标双击,用于没有鼠标双击控件

来源:互联网 发布:在淘宝买精密管犯法吗 编辑:程序博客网 时间:2024/04/30 02:46
internal static class MouseButtonHelper
    {
        private const long k_DoubleClickSpeed = 500;
        private const double k_MaxMoveDistance = 10;


        private static long _LastClickTicks = 0;
        private static Point _LastPosition;
        private static WeakReference _LastSender;
       
        internal static bool IsDoubleClick(object sender, MouseButtonEventArgs e)
        {
            
            Point position = e.GetPosition(null);
            long clickTicks = DateTime.Now.Ticks;
            long elapsedTicks = clickTicks - _LastClickTicks;
            long elapsedTime = elapsedTicks / TimeSpan.TicksPerMillisecond;
            bool quickClick = (elapsedTime <= k_DoubleClickSpeed);
            bool senderMatch = (_LastSender!= null && image.Tag ==_LastSender.Tag);
            _LastSender= sender;
            if (senderMatch && quickClick && position.Distance(_LastPosition) <= k_MaxMoveDistance)
            {
                // Double click!
                _LastClickTicks = 0;
                _LastSender= null;
                return true;
            }


            // Not a double click
            _LastClickTicks = clickTicks;
            _LastPosition = position;
            if (!quickClick)
                _LastSender = new WeakReference(sender);
            return false;
        }


        private static double Distance(this Point pointA, Point pointB)
        {
            double x = pointA.X - pointB.X;
            double y = pointA.Y - pointB.Y;
            return Math.Sqrt(x * x + y * y);
        }


    }
0 0