Example #1
0
        public override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            SkinnableControl ctl = controls.FirstOrDefault(c => c.HitTest(e.Location));

            if (ctl != null)
            {
                MouseEventArgs e2 = new MouseEventArgs(e.Button, e.Clicks, e.X - (int)Math.Round(ctl.Left, 0, MidpointRounding.ToEven), e.Y - (int)Math.Round(ctl.Top, 0, MidpointRounding.ToEven), e.Delta);
                ctl.OnMouseDown(e2);
                this.FocusedControl = ctl;
            }

            // Gestione doppio click
            if ((DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond - lastDoubleClickMsec) <= System.Windows.Forms.SystemInformation.DoubleClickTime)
            {
                Size dbsz = System.Windows.Forms.SystemInformation.DoubleClickSize;
                if (Math.Abs(lastDoubleClickPt.X - e.X) <= dbsz.Width && Math.Abs(lastDoubleClickPt.Y - e.Y) <= dbsz.Height)
                {
                    suppressNextClick = true;
                    if (ctl == null)
                    {
                        base.OnMouseDoubleClick(new MouseEventArgs(e.Button, e.Clicks + 1, e.X, e.Y, e.Delta));
                    }
                    else
                    {
                        ctl.OnMouseDoubleClick(new MouseEventArgs(e.Button, e.Clicks + 1, e.X - (int)Math.Round(ctl.Left, 0, MidpointRounding.ToEven), e.Y - (int)Math.Round(ctl.Top, 0, MidpointRounding.ToEven), e.Delta));
                    }
                }
            }
            else
            {
                lastDoubleClickMsec = DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond;
                lastDoubleClickPt   = e.Location;
                lastDoubleClickCtl  = ctl;
            }
        }