怎么在c#中利用WinForm上实现窗体上控件自由拖动功能

  介绍

这篇文章将为大家详细讲解有关怎么在c#中利用WinForm上实现窗体上控件自由拖动功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

具体如下:

首先在窗体上放一个PictrueBox控件,命名为pb1,拖动完整代码如下:

using 系统;   using  System.Collections.Generic;   using  System.ComponentModel;   using  System.Data;   using  System.Drawing;   using 来;   using 包含;   using  System.Windows.Forms;   namespace  WinFormDrag   {   public 才能;partial  class  Form1 :形式   {才能   ,,,//鼠标按下坐标(控制控件的相对坐标)   ,,,Point  mouseDownPoint =, Point.Empty;   ,,,//显示拖动效果的矩形   ,,,Rectangle  rect =, Rectangle.Empty;   ,,,//是否正在拖拽   ,,,bool  isDrag =,假;   ,,,public  Form1 ()   ,,,{   ,,,,,InitializeComponent ();   ,,,}   ,,,private  void  Form1_Paint (object ,发送方,PaintEventArgs  e)   ,,,{   ,,,,,if  (rect  !=, Rectangle.Empty)   ,,,,,{   ,,,,,,,if  (isDrag)   ,,,,,,,{//画一个和控制一样大小的黑框   ,,,,,,,,,e.Graphics.DrawRectangle (Pens.Black,矩形);   ,,,,,,,}   ,,,,,,,   ,,,,,,,{   ,,,,,,,,,e.Graphics.DrawRectangle (new 笔(this.BackColor),矩形);   ,,,,,,,}   ,,,,,}   ,,,}   ,,,///,& lt; summary>   ,,,///,按下鼠标时   ,,,///,& lt;/summary>   ,,,///,& lt; param  name=皊ender"祝辞& lt;/param>   ,,,///,& lt; param  name=癳"祝辞& lt;/param>   ,,,private  void  pb1_MouseDown (object ,发送方,MouseEventArgs  e)   ,,,{   ,,,,,if  (e.Button ==, MouseButtons.Left)   ,,,,,{   ,,,,,,,mouseDownPoint =, e.Location;   ,,,,,,,//记录控件的大小   ,,,,,,,rect =, pb1.Bounds;   ,,,,,}   ,,,}   ,,,///,& lt; summary>   ,,,///,移过时   ,,,///,& lt;/summary>   ,,,///,& lt; param  name=皊ender"祝辞& lt;/param>   ,,,///,& lt; param  name=癳"祝辞& lt;/param>   ,,,private  void  pb1_MouseMove (object ,发送方,MouseEventArgs  e)   ,,,{   ,,,,,if  (e.Button ==, MouseButtons.Left)   ,,,,,{   ,,,,,,,isDrag =,真的;   ,,,,,,,//重新设置矩形的位置,跟随鼠标移动   ,,,,,,,rect.Location =, getPointToForm (new 点(e.Location.X 安康;mouseDownPoint.X, e.Location.Y 作用;mouseDownPoint.Y));   ,,,,,,,this.Refresh ();   ,,,,,}   ,,,}   ,,,///,& lt; summary>   ,,,///,释放鼠标按钮时   ,,,///,& lt;/summary>   ,,,///,& lt; param  name=皊ender"祝辞& lt;/param>   ,,,///,& lt; param  name=癳"祝辞& lt;/param>   ,,,private  void  pb1_MouseUp (object ,发送方,MouseEventArgs  e)   ,,,{   ,,,,,if  (e.Button ==, MouseButtons.Left)   ,,,,,{   ,,,,,,,if  (isDrag)   ,,,,,,,{   ,,,,,,,,,isDrag =,假;   ,,,,,,,,,//移动控制到放开鼠标的地方   ,,,,,,,,,pb1.Location =, rect.Location;   ,,,,,,,,,this.Refresh ();   ,,,,,,,}   ,,,,,,,重置();   ,,,,,}   ,,,}   ,,,//重置变量   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在c#中利用WinForm上实现窗体上控件自由拖动功能