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

另外本文不討論設計,雖然我知道當前設計不一定是最好的,很多復雜的情況都沒有涵蓋到,不過基本的情況已經覆蓋了,歡迎大家擴展和填充。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM