知识大全 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
相关参考