zoukankan      html  css  js  c++  java
  • 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

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

    作者:LoveJenny
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    vs2015 停 在 update kb2999226 一直不动
    修复vs2012出现 “无法找到包源”的错误
    forward 和redirect的区别
    软件测试分类
    centos7安装HTTPS协议
    php抓取网页特定div区块及图片,从简单入手
    nginx报 File not found 错误
    关于端口
    调试技巧:让断点停在for循环中的 i 为某个值得时候
    an AC a day keeps the WA away ~
  • 原文地址:https://www.cnblogs.com/LoveJenny/p/2970433.html
Copyright © 2011-2022 走看看