有两种方法,一种是直接写代码来实现,一种是用系统的消息来做,如下的代码所示:
1:我做了一个移动lable的,其它控件都是一样的。
Point p=new Point(0,0);
private void label1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
p=new Point(e.X,e.Y);
}
private void label1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button==MouseButtons.Left )
{
this.label1.Location=new Point(e.X-p.X+this.label1.Left,e.Y-p.Y+this.label1.Top);
}
}2:重写WndProc(要在类中重写),如下:
private const int WM_NCHITTEST = 0x84;
private const int HTCLIENT =  1;
private const int HTCAPTION = 2;protected override void WndProc(ref System.Windows.Forms.Message m)
{
switch(m.Msg)
{
case WM_NCHITTEST:
if ((int)m.Result == HTCLIENT)
{
m.Result = (IntPtr)HTCAPTION;
}
}
default:
base.WndProc(ref m);
break;}