在你的Form中定义一个变量:
private Point delta;//在要移动的控件加上一个MouseDown的事件如下:private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
     Delta=new Point(-e.X,-e.Y);
}
//修改你的MouseMove事件代码如下:private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
    //如果点击左键并移动
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        Point pos=pictureBox1.Counts.MousePosition;
        pos.Offset(delta.X,delta.Y);
        this.pictureBox1.Location = pos;
    }
}

解决方案 »

  1.   

    感谢解答!
    Point pos=pictureBox1.Counts.MousePosition;是
    pictureBox1.Controls.MousePosition;的笔误吗?编译没有通过。
    而且MousePosition是相对于屏幕的坐标,我试着改成了以下代码,可是移动的时候,控件总是离得很远。请高手赐教!private Point StartPoint; //鼠标点击之后的相对于窗体的开始坐标
    private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        StartPoint = new Point(e.X + pictureBox1.Location.X ,e.Y + pictureBox1.Location.Y);
    }private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        //如果点击左键并移动
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            //鼠标移动之后的相对于窗体的坐标
            Point EndPoint = new Point(e.X + pictureBox1.Location.X ,e.Y + pictureBox1.Location.Y);
            EndPoint.Offset(EndPoint.X - StartPoint.X,EndPoint.Y - StartPoint.Y);
            this.pictureBox1.Location = EndPoint;
        }
    }
    再加50分,请高手贴出代码和注释,谢谢!
      

  2.   

    是笔误,不好意思,而且MouseDown的Delta要改成delta, 笔误 too. :)
    你的代码方法不对
      

  3.   

    可pictureBox1.Controls.MousePosition;不能编译。
    pictureBox1.Controls后面加了点(.)之后,MousePosition不能出现
      

  4.   

    唉!你也真是,我的代码写错了,你也不会自己去查查:
        把pictureBox1.Controls.MousePosition;
        改为Control.MousePosition;
    OK?
      

  5.   

    谢谢提供思路!不过MousePosition不是世界坐标,是相对于屏幕的坐标。我又修改了一下,基本可以了。谢谢!private Point StartPoint; //鼠标点击之后的相对于窗体的开始坐标
    private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        StartPoint = new Point(-e.X,-e.Y);
    }private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        //如果点击左键并移动
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            Point NewLoction = new Point(Control.MousePosition.X - this.Location.X ,
                                         Control.MousePosition.Y - this.Location.Y);
            NewLoction.Offset(StartPoint.X,StartPoint.Y);
            this.pictureBox1.Location = NewLoction;
        }
    }
      

  6.   

    最近CSDN太慢了!我早就想给分,连打开这个帖子都要花10几分钟!
      

  7.   

    由于边框的原因可能要根据不同情况进行调整Private StartPoint As Point Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
    StartPoint = New Point(-e.X - 1, -e.Y - 1)
    End Sub Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
    If e.Button = MouseButtons.Left Then
    Dim NewLocation As New Point(Control.MousePosition.X - Location.X - (Me.Width - Me.ClientRectangle.Width) / 2, _
     Control.MousePosition.Y - Location.Y - (Me.Height - Me.ClientRectangle.Height) + 4)
    NewLocation.Offset(StartPoint.X, StartPoint.Y)
    PictureBox1.Location = NewLocation
    'Me.ClientRectangle.X()
    End If
    End Sub