为什么MouseEventArgs在方程中使用时不起作用

时间:2013-02-01 15:19:50

标签: c# winforms

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不能在我的等式中工作?对不起,如果我描述不好,我尽我所能。

1 个答案:

答案 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;
        }
    }