方法一: 窗体或者控件的拖动
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的窗体拖动一样...........
窗体与控件拖动技术
本文介绍了两种实现窗体或控件拖动的方法:一种适用于常规窗口和自定义控件;另一种则用于实现不规则窗体的拖动,并能提供与Windows原生窗体相似的体验。
4275

被折叠的 条评论
为什么被折叠?



