第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Drag and Drop control

Drag and Drop control

时间:2019-09-16 00:01:52

相关推荐

Drag and Drop control

在Winform窗体中通过鼠标拖动,改变控件的位置。在拖动过程中,跟随鼠标显示一个与被拖动控件大小一样的黑框,用以模拟拖动效果。如下图: 以下是源代码。这里拖动了一个Button控件。如果需要,还可以在拖动时改变光标。

/Files/tssing/FormDrag.rar

Code

usingSystem;

usingSystem.Collections.Generic;

ponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Forms;

namespaceFormDrag

{

publicpartialclassForm1:Form

{

publicForm1()

{

InitializeComponent();

}

privateControlcontrol;

privatevoidForm1_Load(objectsender,EventArgse)

{

this.Paint+=newSystem.Windows.Forms.PaintEventHandler(this.FormDrag_Paint);

control=newButton();

control.MouseDown+=newMouseEventHandler(control_MouseDown);

control.MouseMove+=newMouseEventHandler(control_MouseMove);

control.MouseUp+=newMouseEventHandler(control_MouseUp);

this.Controls.Add(control);

}

//鼠标按下坐标(control控件的相对坐标)

PointmouseDownPoint=Point.Empty;

//显示拖动效果的矩形

Rectanglerect=Rectangle.Empty;

//是否正在拖拽

boolisDrag=false;

voidcontrol_MouseDown(objectsender,MouseEventArgse)

{

if(e.Button==MouseButtons.Left)

{

mouseDownPoint=e.Location;

//记录控件的大小

rect=control.Bounds;

}

}

voidcontrol_MouseMove(objectsender,MouseEventArgse)

{

if(e.Button==MouseButtons.Left)

{

isDrag=true;

//重新设置rect的位置,跟随鼠标移动

rect.Location=getPointToForm(newPoint(e.Location.X-mouseDownPoint.X,e.Location.Y-mouseDownPoint.Y));

this.Refresh();

}

}

voidcontrol_MouseUp(objectsender,MouseEventArgse)

{

if(e.Button==MouseButtons.Left)

{

if(isDrag)

{

isDrag=false;

//移动control到放开鼠标的地方

control.Location=rect.Location;

this.Refresh();

}

reset();

}

}

//重置变量

privatevoidreset()

{

mouseDownPoint=Point.Empty;

rect=Rectangle.Empty;

isDrag=false;

}

//窗体重绘

privatevoidFormDrag_Paint(objectsender,PaintEventArgse)

{

if(rect!=Rectangle.Empty)

{

if(isDrag)

{//画一个和Control一样大小的黑框

e.Graphics.DrawRectangle(Pens.Black,rect);

}

else

{

e.Graphics.DrawRectangle(newPen(this.BackColor),rect);

}

}

}

//把相对与control控件的坐标,转换成相对于窗体的坐标。

privatePointgetPointToForm(Pointp)

{

returnthis.PointToClient(control.PointToScreen(p));

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。