C#窗體拖動

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;

      }

    }

  }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章