EasyText, EasyLicense 的作者, https://github.com/EasyHelper Good Good Study,Day Day Up.

 

Control 的DraggerHelper, 拖动控件从此变得很简单。。。

程序员经常要实现拖动控件的功能,一般实现这个功能,都要注册事件,然后写MouseMove的代码,

Point point = Point.Empty;

control.MouseDown += control_MouseDown;
control.MouseMove += control_MouseMove;
 control.MouseLeave += control_MouseLeave;

如果程序的很多地方都有这个逻辑的话,那么代码就会有一大部分的重复了。

 

在网上如果你搜索控件拖动的话,大部分代码都是上面的代码,重复的逻辑,重复的故事。

于是我想,能不能写一个帮助类,当需要拖动的时候,只要调用EnableDrag方法就行了,如下:

private void Form1_Load(object sender, EventArgs e)
{
    DraggerHelper.EnableDrag(button1);
    DraggerHelper.EnableDrag(label1);

    DraggerHelper.DisableDrag(button1);
    DraggerHelper.DisableDrag(label1);
}

 

要实现这个效果,需要一些小技巧,当然,这些已经封装进了DraggerHelper 类。

完整的代码如下:

完整的代码

 

这里是如何使用DragHelper的例子:

private void Form1_Load(object sender, EventArgs e)
{
    DraggerHelper.EnableDrag(button1);
    DraggerHelper.EnableDrag(label1);

    DraggerHelper.DisableDrag(button1);
    DraggerHelper.DisableDrag(label1);
}

private void button1_Click(object sender, EventArgs e)
{
    if (label1.IsControlCanDrag())
    {
        label1.DisableDrag();
    }
    else
    {
        label1.EnableDrag();
    }
}

 完整的代码:ControlDragger.rar

 

本文参考了:WCCC的杰出的文章:http://www.cnblogs.com/whc-blog/archive/2011/08/26/2154038.html

另外本文不讨论设计,虽然我知道当前设计不一定是最好的,很多复杂的情况都没有涵盖到,不过基本的情况已经覆盖了,欢迎大家扩展和填充。

posted @ 2013-03-20 07:18  LoveJenny  阅读(2358)  评论(7编辑  收藏  举报
EasyText, EasyLicense 的作者, https://github.com/EasyHelper Good Good Study,Day Day Up.