我曾经做过这个,用的是控件的location属性,后来也用过left,right属性。移动是可以,不过会出现两个控件,那时因为没时间也没找出问题所在。你可以试试

解决方案 »

  1.   

    可以参消息WM_NCHITTEST来处理,也可通过其它的如 this.Location = new Point(x,y)来做:private const int WM_NCHITTEST = 0x84; //移动鼠标,按住或释放鼠标时发生的系统消息
    protected override void WndProc(ref Message m)
    {
    if (m.Msg == WM_NCHITTEST)
    {
    m.Result = (IntPtr)HTCAPTION;//移动窗体,但双击可以最大化窗体或还原。
    }
    }
      

  2.   

    参考
    http://community.csdn.net/Expert/topic/3563/3563219.xml?temp=.4888574
      

  3.   

    如果写一个基控件可以对WndProc来处理,这样每个从其继承的控件都有一样的特性,但是如果很少的控件想这样倒不如直接用下面的代码,这样更直观,但是对每一个要处理的控件都要写代码,如:
    Point t;
    private void panel_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if (e.Button==MouseButtons.Left )
    {
    this.label3.Location=new Point(this.label3.Left + e.X - t.X, this.label3.Top + e.Y - t.Y);
    }
    }private void panel_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    t = new Point(e.X, e.Y);
    }
      

  4.   

    代码呵呵,明显有错,改一下代码:Point t;
    private void panel_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if (e.Button==MouseButtons.Left )
    {
    this.panel.Location=new Point(this.panel.Left + e.X - t.X, this.panel.Top + e.Y - t.Y);
    }
    }private void panel_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    t = new Point(e.X, e.Y);
    }
      

  5.   

    这样可以实现
    private bool IsMDown = false;
    private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    IsMDown = true;
    Point point = new Point();
    point.X = e.X;
    point.Y = e.Y;
    Oldpoint = point;
    } private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if(IsMDown)
    {
    Point point = new Point();
    point = this.DesktopLocation;
    this.pictureBox1.Visible=false;
    this.pictureBox1.Top  = e.Y-point.Y;
    this.pictureBox1.Left  = e.X-point.X;
    this.pictureBox1.Visible=true;
    }
    } private void pictureBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    IsMDown = false;
    }