適用於無邊框窗體,自定義標題欄
之前在網上找的,如http://www.cnblogs.com/yuxuan/archive/2010/09/25/1834346.html這篇博文,開始移動時會瞬移幾個像素.....
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Windows.Forms;
- using System.Drawing;
- namespace EW.XIS.Common
- {
- /// <summary>
- /// <para>說明:窗體拖動類,通過這個類提供的方法實現窗體上任意控件可輔助拖動窗體</para>
- /// </summary>
- public class DragFormClass
- {
- private static bool isMouseDown = false;
- private static Point mouseOffset;
- private static Form _form;
- /// <summary>
- /// 在窗體上增加拖拽事件
- /// </summary>
- /// <param name="control">控件對象</param>
- public static 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);
- }
- /// <summary>
- /// 鼠標按下之時,保存鼠標相對於窗體的位置
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private static void control_MouseDown(object sender, MouseEventArgs e)
- {
- if (Control.MouseButtons == MouseButtons.Left)
- {
- Point p=_form.PointToClient(Control.MousePosition);
- mouseOffset = new Point(-p.X, -p.Y);
- isMouseDown = true;
- }
- }
- /// <summary>
- /// 移動鼠標的時候改變窗體位置
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private static void control_MouseMove(object sender, MouseEventArgs e)
- {
- if (Control.MouseButtons == MouseButtons.Left)
- {
- if (isMouseDown)
- {
- Point mouse = Control.MousePosition;
- mouse.Offset(mouseOffset.X, mouseOffset.Y);
- _form.Location = new Point(mouse.X, mouse.Y);
- }
- }
- }
- /// <summary>
- /// 鬆開鼠標的時候,重設事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private static void control_MouseUp(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Left)
- {
- isMouseDown = false;
- }
- }
- }
- }