• 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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    君子藏器于身,伺时而动
    高级前端面试集锦
    ES6标准入门(第三版).pdf----推荐指数⭐⭐⭐⭐⭐
    《Vue.js实战》--推荐指数⭐⭐⭐⭐
    如何让vue自定义组件可以包裹内容,并且渲染出来,以及组件的组合使用
    vue里如何灵活的绑定class以及内联style
    为什么VUE注册组件命名时不能用大写的?
    在github上搭建一个静态的个人网站
    leetcode-6-basic
    leetcode-5-basic
  • 原文地址:https://www.cnblogs.com/LoveJenny/p/2970433.html
Copyright © 2020-2023  润新知