知识大全 C#实现窗体和任意控件的拖动

Posted

篇首语:欠伸展肢体,吟咏心自愉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#实现窗体和任意控件的拖动相关的知识,希望对你有一定的参考价值。

C#实现窗体和任意控件的拖动  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  程序内有大部分注释了 欢迎大家指正了!

  Code

  [copy to clipboard]

  CODE:

   using System;

   using System Drawing;

   using System Windows Forms;

  

   namespace Yoker FormUtils

  

     /**//// <summary>

     /// <para>说明 窗体拖动类 通过这个类提供的方法实现窗体上任意控件可辅助拖动窗体</para>

     /// <para>作者 Yoker Wu</para>

     /// <para>原创地址 [url][/url]</para>

     /// </summary>

     public class dragFormClass

     

       private static bool isMouseDown = false;

       private static Point mouseOffset;

       private static Form _form;

       public dragFormClass()

  

       /**//// <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 (e Button == MouseButtons Left)

         

           Control control = sender as Control;

           int offsetX = e X;

           int offsetY = e Y;

           //判断是窗体还是控件 从而改进鼠标相对于窗体的位置

           if (!(control is System Windows Forms Form))

           

             offsetX = offsetX control Left;

             offsetY = offsetY control Top;

           

           //判断窗体有没有标题栏 从而改进鼠标相对于窗体的位置

           if (_form FormBorderStyle != FormBorderStyle None)

           

             offsetX = offsetX SystemInformation FrameBorderSize Width;

             offsetY = offsetY SystemInformation FrameBorderSize Height SystemInformation CaptionHeight;

           

           mouseOffset = new Point(offsetX offsetY);

           isMouseDown = true;

         

       

       /**//// <summary>

       /// 移动鼠标的时候改变窗体位置

       /// </summary>

       /// <param name= sender ></param>

       /// <param name= e ></param>

       private static void control_MouseMove(object sender MouseEventArgs e)

       

         if (isMouseDown)

         

           Point mouse = Control MousePosition;

           mouse Offset(mouseOffset X mouseOffset Y);

           _form Location = mouse;

         

       

       /**//// <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;

         

       

     

  

cha138/Article/program/net/201311/13302

相关参考

知识大全 c#窗体事件

  从网上看到了一个窗体拖动事件超级简洁至少现在这个阶段我是看起来有困难的有兴趣的哥们们可以讨论下usingSystemusingSystemCollectionsGenericusingSystem

知识大全 如何拖动没有边框的窗体

  这个功能在VB中需要借助于API函数才能实现而在中凭自己的功能就能实现首先设置窗体的FormBorderStyle属性为none以去掉窗体的边框然后在窗体上添加一个按钮窗体中的代码如下  Publ

知识大全 VB.NET 拖动无边框窗体编程实例

VB.NET拖动无边框窗体编程实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    Impor

知识大全 一个拖动无标题栏窗体的方法

  privateboolisMouseDown=false;  privatePointFormLocation;    //form的location  p

知识大全 控件的拖动和缩放技术全解

  一光标的指示  当光标移动到要拖动或缩放的控件上时应显示相应的动作箭头定义一个枚举的变量来标识对应的状态    EnumEnumMousePointPosition    MouseSizeNon

知识大全 PowerBuilder9.0窗体控件自动缩放的实现

PowerBuilder9.0窗体控件自动缩放的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 在Delphi中巧改窗体文件实现控件数组化

在Delphi中巧改窗体文件实现控件数组化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 使用反射将业务对象绑定到 ASP.NET 窗体控件

使用反射将业务对象绑定到ASP.NET窗体控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引

知识大全 设置C#子窗体在主窗体中居中显示

设置C#子窗体在主窗体中居中显示  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问题的开始是由C

知识大全 C#窗体的应用

C#窗体的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在做Winform窗体程序的时候遇