1

您好,我发现此代码可能会帮助我解决以下问题,我正在尝试通过鼠标在我的表单中进行拖放和移动标签。

 private Point MouseDownLocation;

    private void MyControl_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            MouseDownLocation = e.Location;
        }
    }

    private void MyControl_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            this.Left = e.X + this.Left - MouseDownLocation.X;
            this.Top = e.Y + this.Top - MouseDownLocation.Y;
        }
    }

但是,当我将 mousemove 和 mousedown 作为要标记的事件时,我尝试抓住标签并用鼠标移动它会随着整个表单移动。

请问代码应该在哪里改进?

感谢您的时间。

4

1 回答 1

2

而不是使用this.Left(这是形式),你需要移动你的控制:

private void MyControl_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        MyControl.Left = e.X + MyControl.Left - MouseDownLocation.X;
        MyControl.Top = e.Y + MyControl.Top - MouseDownLocation.Y;
    }
}

此外,您可能希望在按下按钮时捕获鼠标,并在按下按钮时释放它。这将防止非常快速的动作“破坏”你的逻辑。有关详细信息,请参阅Windows 窗体中的鼠标捕获

于 2013-09-30T17:22:48.160 回答