Windows窗体应用程序:
这让我困惑了好几个小时。我想要做的就是当我按住标签时,它会移动表格。
private void label1_MouseUp(object sender, MouseEventArgs e)
{
KeepMoving = false;
}
private void label1_MouseDown(object sender, MouseEventArgs e)
{
KeepMoving = true;
}
private void label1_MouseMove(object sender, MouseEventArgs e)
{
if (KeepMoving == true)
this.Location = new Point(MousePosition.X - (e.X + SystemInformation.FrameBorderSize.Width + label1.Left), MousePosition.Y - (e.Y + SystemInformation.CaptionHeight + label1.Top));
}
是我正在使用的(当然还有公共布尔KeepMoving。)
如果我删除e.X和e.Y,一切正常,但是它相对于标签左上角的位置,但是我想要标签本身的位置。
当我使用消息框在标签上显示e.X和e.Y的坐标时,数字是正确的,显示我点击的标签上的位置。当我使用上面代码中的点时,无论我在哪个标签上点击,数字都不会改变,当我试图移动它时,它会射到30k +范围内。
为什么MouseEventArgs不能在我的等式中工作?对不起,如果我描述不好,我尽我所能。
答案 0 :(得分:2)
跟踪标签左上角的初始偏移量并相应调整表格的位置。
public bool KeepMoving = false;
private Point offset;
private void label1_MouseDown(object sender, MouseEventArgs e)
{
KeepMoving = true;
offset = new Point(e.X, e.Y);
}
private void label1_MouseUp(object sender, MouseEventArgs e)
{
KeepMoving = false;
}
private void label1_MouseMove(object sender, MouseEventArgs e)
{
if (KeepMoving)
{
Left += e.X - offset.X;
Top += e.Y - offset.Y;
}
}