可以通过控件的MouseMove,MouseDown和MouseUp事件来实现控件的移动。
如移动Button1按钮, 通过在button1的MouseMove事件句柄button1_MouseMove中,改变button1的位置即可,也就是重新设置this.button1.Location属性的值。 
下面提供一段示例程序,演示移动Button按钮,private Point mousePos; // 记录鼠标位置 
private bool beginmove = false; // 记录是否可以移动 
…… 
private void button1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) 

if(beginmove) 

int diffx,diffy; 
diffx =  mousePos.X - e.X; 
diffy =  mousePos.Y - e.Y; 
this.button1.Location = new Point(button1.Location.X-diffx,button1.Location.Y-diffy); 


private void button1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) 

beginmove = true;//开始移动 
mousePos = new Point(e.X, e.Y); 

private void button1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) 

beginmove = false;//停止移动 

解决方案 »

  1.   

    你也可以这样做:
    namespace abc
    {
    public abc:Form
    {
    private Button bn; public const int WM_NCLBUTTONDOWN = 0xA1; 
    public const int HTCAPTION = 0x2; 
    [DllImportAttribute ("user32.dll")] 
    public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); 
    [DllImportAttribute ("user32.dll")] 
    public static extern bool ReleaseCapture(); 
    ...
    \\为按钮bn添加鼠标事件
    private void bn_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    ReleaseCapture(); 
    SendMessage(this.bn.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); 
    }
    }
    }