如图:绿线是鼠标在要移动的Label上运动轨迹,红线则是Label的左顶点的运动轨迹。很明显红线箭头所在的点即为Label的左顶点最终应该在的位置,下面是具体实现的代码:
private Point mouse_offset;
//给要移动的label加上MouseDown事件
private void label1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left) //判断是否是鼠标左键按下
{
mouse_offset = new Point(-e.X, -e.Y);
// e.X ,e.Y为鼠标按下时相对于Label的位置
}
}
private void label1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point mousePosition = Control.MousePosition; //得到鼠标当前的屏幕坐标
mousePosition.Offset(mouse_offset); //将mousePosition移动-e.X,-e.Y
this.Location = mousePosition; //设置Label的坐标(屏幕坐标)
}
}
相信你的Label应该可以随意跑了吧