来自:
http://www.cppblog.com/xingmuxixi/archive/2010/01/27/106510.html
方法一: 窗体或者控件的拖动
private Point m_MousePoint; private Point m_LastPoint; protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); this.m_LastPoint = this.Location; this.m_MousePoint = this.PointToScreen(e.Location); } protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if (e.Button == MouseButtons.Left) { Point t = this.PointToScreen(e.Location); Point l = this.m_LastPoint; l.Offset(t.X - this.m_MousePoint.X, t.Y - this.m_MousePoint.Y); this.Location = l; } }
1 代码直接复制到窗体上就可以使用.
2 可以用到UserControl上,UserControl就成了一个可拖动的控件了
3 可以用到自定义控件上,例如:自定义控件继承了一个Button ,然后写上上面代码,那么这个自定义Button就可以在Form窗体上随处拖动....
方法二、
using System.Runtime.InteropServices;[DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); public const int WM_SYSCOMMAND = 0x0112; public const int SC_MOVE = 0xF010; public const int HTCAPTION = 0x0002; public void ShapedForm_MouseDown(object sender, MouseEventArgs e) { ReleaseCapture(); SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); }
方法二:比较好 ,能够画出 虚线框,跟Windows的窗体拖动一样...........