C# WinForm实现窗体上控件自由拖动功能示例
本文实例讲述了C#WinForm实现窗体上控件自由拖动功能。分享给大家供大家参考,具体如下:
说明:首先在窗体上放一个PictrueBox控件,命名为pb1,拖动完整代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceWinFormDrag
{
publicpartialclassForm1:Form
{
//鼠标按下坐标(control控件的相对坐标)
PointmouseDownPoint=Point.Empty;
//显示拖动效果的矩形
Rectanglerect=Rectangle.Empty;
//是否正在拖拽
boolisDrag=false;
publicForm1()
{
InitializeComponent();
}
privatevoidForm1_Paint(objectsender,PaintEventArgse)
{
if(rect!=Rectangle.Empty)
{
if(isDrag)
{//画一个和Control一样大小的黑框
e.Graphics.DrawRectangle(Pens.Black,rect);
}
else
{
e.Graphics.DrawRectangle(newPen(this.BackColor),rect);
}
}
}
///
///按下鼠标时
///
///
///
privatevoidpb1_MouseDown(objectsender,MouseEventArgse)
{
if(e.Button==MouseButtons.Left)
{
mouseDownPoint=e.Location;
//记录控件的大小
rect=pb1.Bounds;
}
}
///
///移过时
///
///
///
privatevoidpb1_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();
}
}
///
///释放鼠标按钮时
///
///
///
privatevoidpb1_MouseUp(objectsender,MouseEventArgse)
{
if(e.Button==MouseButtons.Left)
{
if(isDrag)
{
isDrag=false;
//移动control到放开鼠标的地方
pb1.Location=rect.Location;
this.Refresh();
}
reset();
}
}
//重置变量
privatevoidreset()
{
mouseDownPoint=Point.Empty;
rect=Rectangle.Empty;
isDrag=false;
}
//把相对与control控件的坐标,转换成相对于窗体的坐标。
privatePointgetPointToForm(Pointp)
{
returnthis.PointToClient(pb1.PointToScreen(p));
}
}
}
更多关于C#相关内容感兴趣的读者可查看本站专题:《WinForm控件用法总结》、《C#窗体操作技巧汇总》、《C#数据结构与算法教程》、《C#常见控件用法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。