using System;
using System.Drawing;
using System.Windows.Forms;
namespace Yoker.FormUtils
{
/// 说明:窗体拖动类,通过这个类提供的方法实现窗体上任意控件可辅助拖动窗体
/// 作者:Yoker.Wu
/// 原创地址:[url]http://Yoker.cnblogs.com[/url]
///
public classdragFormClass
{
privatestatic bool isMouseDown = false;
privatestatic Point mouseOffset;
privatestatic Form. _form;
publicdragFormClass() { }
///
/// 在窗体上增加拖拽事件
///
/// 控件对象
publicstatic void bindControl(Control control)
{
//如果控件为空
if(control == null)
{
return;
}
_form. =control.FindForm();
//增加鼠标拖动窗体移动事件
control.MouseMove+= new MouseEventHandler(control_MouseMove);
control.MouseDown+= new MouseEventHandler(control_MouseDown);
control.MouseUp+= new MouseEventHandler(control_MouseUp);
}
///
/// 鼠标按下之时,保存鼠标相对于窗体的位置
///
///
///
privatestatic void control_MouseDown(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
Controlcontrol = sender as Control;
intffsetX = - e.X;
intffsetY = - e.Y;
//判断是窗体还是控件,从而改进鼠标相对于窗体的位置
if(!(control is System.Windows.Forms.Form))
{
ffsetX= offsetX - control.Left;
ffsetY= offsetY - control.Top;
}
//判断窗体有没有标题栏,从而改进鼠标相对于窗体的位置
if(_form.FormBorderStyle. != FormBorderStyle.None)
{
ffsetX= offsetX - SystemInformation.FrameBorderSize.Width;
ffsetY= offsetY - SystemInformation.FrameBorderSize.Height -SystemInformation.CaptionHeight;
}
mouseOffset= new Point(offsetX, offsetY);
isMouseDown= true;
}
}
///
/// 移动鼠标的时候改变窗体位置
///
///
///
privatestatic void control_MouseMove(object sender, MouseEventArgs e)
{
if(isMouseDown)
{
Pointmouse = Control.MousePosition;
mouse.Offset(mouseOffset.X,mouseOffset.Y);
_form.Location= mouse;
}
}
///
/// 松开鼠标的时候,重设事件
///
///
///
privatestatic void control_MouseUp(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
isMouseDown= false;
}
}
}
}