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#程序设计有所帮助。