设置界面上的控件可以拖动

 public class GroupControlDrag
    {
        private Point mouse_offset;
        private Control control;
        private Control containerControl;
       
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="要拖动的控件"></param>
        /// <param name="拖动控件的容器,以获取设置拖动的范围,如果直接传值是不对的,以为工作区域的大小会变"></param>
        public GroupControlDrag(Control control, Control containerControl)
        {
            this.control = control;
            this.containerControl = containerControl;
        }
        public void BindMoveEvent()
        {
            control.MouseDown += ShowControl_MouseDown;
            control.MouseMove += ShowControl_MouseMove;
        }

        private void ShowControl_MouseDown(object sender, MouseEventArgs e)
        {
            mouse_offset = new Point(-e.X, -e.Y);//鼠标点击的位置相对于控件左上角的位置
        }
        private void ShowControl_MouseMove(object sender, MouseEventArgs e)
        {
            Control control = sender as Control;
            control.Cursor = Cursors.Arrow;
            if (e.Button == MouseButtons.Left)
            {
                Point mousePos = Control.MousePosition;//鼠标相对于屏幕左上角的位置
                mousePos.Offset(mouse_offset.X, mouse_offset.Y);//控件相对与屏幕左上角的位置
                Point newPoint = control.Parent.PointToClient(mousePos); //将指定屏幕点的位置计算成工作区(control.Parent)坐标。

                if (newPoint.X < 0)
                {
                    newPoint.X = 0;
                }
                if (newPoint.X > containerControl.Width - control.Width)
                {
                    newPoint.X = containerControl.Width - control.Width;
                }
                if (newPoint.Y < 0)
                {
                    newPoint.Y = 0;
                }
                if (newPoint.Y > containerControl.Height - control.Height)
                {
                    newPoint.Y = containerControl.Height - control.Height;
                }
                ((Control)sender).Location = newPoint;
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/sinat_41746494/article/details/81036675