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;
}
}
}
}