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
今日推荐
周排行