本文实例讲述了C# WinForm实现窗体上控件自由拖动功能。分享给大家供大家参考,具体如下:

说明:首先在窗体上放一个PictrueBox控件,命名为pb1,拖动完整代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinFormDrag
{
public partial class Form1 : Form
{
//鼠标按下坐标(control控件的相对坐标)
Point mouseDownPoint = Point.Empty;
//显示拖动效果的矩形
Rectangle rect = Rectangle.Empty;
//是否正在拖拽
bool isDrag = false;
public Form1()
{
InitializeComponent();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (rect != Rectangle.Empty)
{
if (isDrag)
{//画一个和Control一样大小的黑框
e.Graphics.DrawRectangle(Pens.Black, rect);
}
else
{
e.Graphics.DrawRectangle(new Pen(this.BackColor), rect);
}
}
}
/// <summary>
/// 按下鼠标时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pb1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseDownPoint = e.Location;
//记录控件的大小
rect = pb1.Bounds;
}
}
/// <summary>
/// 移过时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pb1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isDrag = true;
//重新设置rect的位置,跟随鼠标移动
rect.Location = getPointToForm(new Point(e.Location.X - mouseDownPoint.X, e.Location.Y - mouseDownPoint.Y));
this.Refresh();
}
}
/// <summary>
/// 释放鼠标按钮时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pb1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (isDrag)
{
isDrag = false;
//移动control到放开鼠标的地方
pb1.Location = rect.Location;
this.Refresh();
}
reset();
}
}
//重置变量
private void reset()
{
mouseDownPoint = Point.Empty;
rect = Rectangle.Empty;
isDrag = false;
}
//把相对与control控件的坐标,转换成相对于窗体的坐标。
private Point getPointToForm(Point p)
{
return this.PointToClient(pb1.PointToScreen(p));
}
}
}
更多关于C#相关内容感兴趣的读者可查看本站专题:《WinForm控件用法总结》、《C#窗体操作技巧汇总》、《C#数据结构与算法教程》、《C#常见控件用法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。
# C#
# WinForm
# 窗体
# 控件
# 拖动
# C#实现一键清空控件值的示例代码
# C#在Windows窗体控件实现内容拖放(DragDrop)功能
# C#实现代码移除窗体上的控件
# 鼠标
# 程序设计
# 按下
# 相关内容
# 感兴趣
# 数据结构
# 给大家
# 相对于
# 转换成
# 更多关于
# 命名为
# 所述
# 使用技巧
# 面向对象
# 画一
# 拖拽
# 操作技巧
# 讲述了
# WinFormDrag
相关文章:
ui设计制作网站有哪些,手机UI设计网址吗?
建站之星ASP如何实现CMS高效搭建与安全管理?
如何续费美橙建站之星域名及服务?
专业公司网站制作公司,用什么语言做企业网站比较好?
建站之星价格显示格式升级,你的预算足够吗?
建站主机选哪种环境更利于SEO优化?
浅析上传头像示例及其注意事项
如何快速搭建FTP站点实现文件共享?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
如何快速登录WAP自助建站平台?
中山网站制作网页,中山新生登记系统登记流程?
详解jQuery停止动画——stop()方法的使用
如何在服务器上配置二级域名建站?
如何快速生成可下载的建站源码工具?
如何在IIS管理器中快速创建并配置网站?
在线教育网站制作平台,山西立德教育官网?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
创业网站制作流程,创业网站可靠吗?
如何快速完成中国万网建站详细流程?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何通过西部建站助手安装IIS服务器?
如何制作算命网站,怎么注册算命网站?
如何在景安云服务器上绑定域名并配置虚拟主机?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
常州企业网站制作公司,全国继续教育网怎么登录?
微课制作网站有哪些,微课网怎么进?
建站主机数据库如何配置才能提升网站性能?
上海网站制作开发公司,上海买房比较好的网站有哪些?
长沙做网站要多少钱,长沙国安网络怎么样?
如何快速配置高效服务器建站软件?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
C#如何使用XPathNavigator高效查询XML
如何快速搭建二级域名独立网站?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
如何选择适配移动端的WAP自助建站平台?
建站之星代理平台如何选择最佳方案?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
制作旅游网站html,怎样注册旅游网站?
高端企业智能建站程序:SEO优化与响应式模板定制开发
如何通过多用户协作模板快速搭建高效企业网站?
文字头像制作网站推荐软件,醒图能自动配文字吗?
临沂网站制作公司有哪些,临沂第四中学官网?
如何选择服务器才能高效搭建专属网站?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
韩国服务器如何优化跨境访问实现高效连接?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
如何通过WDCP绑定主域名及创建子域名站点?
如何在腾讯云服务器上快速搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。