3

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。)

如果我删除 eX 和 eY,一切正常,但它是相对于标签左上角的位置,但是我想要标签本身的位置。

当我使用消息框在标签上显示 eX 和 eY 的坐标时,数字是正确的,显示了我点击标签的位置。当我使用上面代码中的点时,无论我点击标签上的哪个位置,数字都不会改变,当我尝试移动它时,它会上升到 30k+ 范围。

为什么 MouseEventArgs 在我的方程式中不起作用?抱歉,如果我描述得不好,我会尽力而为。

4

1 回答 1

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;
        }
    }
于 2013-02-01T15:54:06.010 回答