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;

      }

    }

  }

}

猜你喜欢

转载自blog.csdn.net/Zhangchen9091/article/details/44561327