自定義控制項的拖動

2021-04-09 09:20:45 字數 1615 閱讀 6903

自定義控制項的拖動

//新增事件

this.mouseup += new system.windows.forms.mouseeventhandler(this.dragend);

this.mousemove += new system.windows.forms.mouseeventhandler(this.dragmove);

this.mousedown += new system.windows.forms.mouseeventhandler(this.dragbegin);   

private point p1;//拖動前滑鼠的螢幕座標

private point p2;//拖動後滑鼠的螢幕座標

private bool _isdrag;//是否正在被拖動

private bool _allowdragmove;

/// 是否允許被拖動。

public bool allowdragmove

get

return this._allowdragmove;

set

this._allowdragmove = value;

private void dragbegin(object sender, system.windows.forms.mouseeventargs e)

if(e.button == mousebuttons.left & this.allowdragmove)

this._isdrag = true;   

//記錄下拖動前的座標 

this.p1 = this.pointtoscreen(new point(e.x, e.y));

private void dragend(object sender, system.windows.forms.mouseeventargs e)

if(e.button == mousebuttons.left & this._isdrag)

this._isdrag = false;

//記錄下拖動後的座標

this.p2 = this.pointtoscreen(new point(e.x, e.y));

//計算位移

int x = p2.x - p1.x;

int y = p2.y - p1.y;   

//移動控制項位置

this.left += x;

this.top += y;

private void dragmove(object sender, system.windows.forms.mouseeventargs e)

if(this._isdrag)

//記錄下拖動後的座標

this.p2 = this.pointtoscreen(new point(e.x, e.y));

//計算位移

int x = p2.x - p1.x;

int y = p2.y - p1.y;   

//移動控制項位置

this.left += x;

this.top += y;   

//把拖動後的頂點作為新的拖動前頂點

p1 = p2;

自定義控制項的拖動

新增事件 this.mouseup new system.windows.forms.mouseeventhandler this.dragend this.mousemove new system.windows.forms.mouseeventhandler this.dragmove this...

c 自定義可拖動變形控制項

public class 控制項移動變形類 usercontrol 控制項類 rectangle 傳遞控制項 傳遞控制項相對於本控制項的範圍 rectangle 本控制項 本控制項相對於自己的範圍 rectangle 調節點邊框 new rectangle 8 8個點相對於本控制項的範圍 recta...

Android自定義控制項 可拖動控制的圓環控制條

前幾天收到這麼乙個需求,本來以為挺簡單的,沒想到最後發現實現起來還是有點小麻煩的,在這裡小小的總結一下。先看看下面這張需求的樣圖 然後在看一下最終實現的效果圖,可能是gif錄製軟體的問題,有一些浮影,忽略就好了 首先要分析一下最核心的地方,如何獲取到滑動距離對應的弧長,看圖 p1是手指按下的點,很明...