C# 通过拖控件移动窗体

目录

  • 引言
  • 一、通过控件事件移动窗体
    • 1、创建窗体界面
    • 2、添加控件事件
    • 3、添加代码
  • 二、通过windowsAPI移动窗体
    • 1、 构建窗体和添加事件
    • 2、代码展示

引言

在C#Form窗体设计中,如果我们不需要使用默认边框设计自己个性化的窗体(FromBorderStyle=none时),这时候你会发现拖动窗体的功能就没有了,这里需要自己构建方法让用户可以拖动整个窗体,这里我们使用前辈的方法实现和描述一下。即可以通过窗体中的控件事件来控制拖动整个窗体,也可以通过系统API 捕获鼠标拖动窗体,下面就介绍这两方法。

一、通过控件事件移动窗体

1、创建窗体界面

在项目中添加窗体,我这里添加一个窗体test1,并添加一个label作为操作目标,添加上自己的文字,颜色突显一下。
在这里插入图片描述

2、添加控件事件

通过属性栏中的事件添加三个事件,分别是鼠标的MouseDown、MouseMove以及MouseUp事件。
在这里插入图片描述

3、添加代码

在窗体代码中添加代码,详见下面代码和注释。

        //鼠标是否拖动标志private bool isDragging = false;//鼠标按下时的位置private Point downPosition;//鼠标按下时的窗体位置private Point lastFormPosition;/// <summary>/// 鼠标按下事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void label_MouseDown(object sender, MouseEventArgs e){//判断是否为鼠标左键按下if (e.Button == MouseButtons.Left){//置标志为trueisDragging = true;//保存当前鼠标坐标downPosition = Cursor.Position;//保存当前窗体坐标lastFormPosition = this.Location;}}/// <summary>///  鼠标移动事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void label_MouseMove(object sender, MouseEventArgs e){//判断鼠标左键是否按下if (isDragging){// 计算鼠标移动的偏移量int moveX = Cursor.Position.X - downPosition.X;int moveY = Cursor.Position.Y - downPosition.Y;// 更新窗体的位置this.Location = new Point(lastFormPosition.X + moveX, lastFormPosition.Y + moveY);} }/// <summary>/// 鼠标松开事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void label_MouseUp(object sender, MouseEventArgs e){//如果是鼠标左键松开,则修改标志为falseif (e.Button == MouseButtons.Left){isDragging = false;}}

二、通过windowsAPI移动窗体

1、 构建窗体和添加事件

构建窗体和添加事件同上一个个方法,我就不详细说明了,只是添加事件的主题更换成窗体test1。

2、代码展示

构建窗体和添加事件通过鼠标移动事件中,调用windows系统API的SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam)函数,可以看到除控件外的部分都可以用来拖动整个窗体。

   private const int HT_CAPTION = 0x2;//窗体标题private const int WM_NCLBUTTONDOWN = 0xA1;//鼠标点击的是非客户区[DllImport("user32.dll")]public static extern bool ReleaseCapture();[DllImport("user32.dll")]public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);/// <summary>/// 窗体鼠标移动事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void test1_MouseMove(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){//释放鼠标捕获ReleaseCapture();//非客户区鼠标的拖动窗体消息SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);} }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LEAN 类型理论之注解(Annotations of LEAN Type Theory)-- 商类型(Quotient Type)

商类型&#xff08;Quotient Type&#xff09;&#xff0c;也称划分类型&#xff0c;通过给定义一个定义在某一类型 α 上的关系R&#xff1a;α → α→ ℙ&#xff0c;将类型α 中&#xff0c;满足关系R的元素摘出来&#xff0c;组成该商类型&#xff08;Quotient&#xff09…

2024国赛数学建模C题完整论文:农作物的种植策略

农作物种植策略优化的数学建模研究&#xff08;完整论文&#xff0c;持续更新&#xff0c;大家持续关注&#xff0c;更新见文末名片 &#xff09; 摘要 在本文中&#xff0c;建立了基于整数规划、动态规划、马尔科夫决策过程、不确定性建模、多目标优化、相关性分析、蒙特卡洛…

20:HAL--RNG

一&#xff1a;RNG 伪随机数就是rand函数产生的数。 F1系列的没有RNG,使用本次说的都是F407的&#xff0c;我使用的是STM32F407VET6 B&#xff1a;框架 C&#xff1a;寄存器 /*RNG_SR寄存器的DRDY位*/ while ((__HAL_RNG_GET_FLAG(&rng_handle, RNG_FLAG_DRDY) RESET) …

Opencv中的直方图(1)计算反向投影直方图函数calcBackProject()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算直方图的反向投影。 cv::calcBackProject 函数计算直方图的反向投影。也就是说&#xff0c;类似于 calcHist&#xff0c;在每个位置 (x, y)…

PostgreSQL的repmgr工具介绍

PostgreSQL的repmgr工具介绍 repmgr&#xff08;Replication Manager&#xff09;是一个专为 PostgreSQL 设计的开源工具&#xff0c;用于管理和监控 PostgreSQL 的流复制及实现高可用性。它提供了一组工具和实用程序&#xff0c;简化了 PostgreSQL 复制集群的配置、维护和故障…

CSS解析:定位和层叠上下文

许多开发人员对定位的理解很粗略&#xff0c;如果不完全了解定位&#xff0c;就很容易给自己挖坑。有时候可能会把错误的元素放在其他元素前面&#xff0c;要解决这个问题却没有那么简单。 一般的布局方法是用各种操作来控制文档流的行为。定位则不同&#xff1a;它将元素彻底…

虚幻地形高度图生成及测试

虚幻地形高度图生成及测试 虚幻引擎地形系统将高度数据存储在高度图中&#xff0c;这是一个灰阶图像&#xff0c;使用黑白色值来存储地貌高程。在高度图中&#xff0c;纯黑色值表示最低点&#xff0c;纯白色值表示最高点。支持16位灰阶PNG、8位灰阶r8及16位灰阶r16格式。 本文…

硬刚苹果还得是华为

文&#xff5c;琥珀食酒社 作者 | 璇子 牛皮啊 华为发三折叠不意外 意外的是 这各种翻转简直颠覆想象 市面上没见过这么能“翻转”的&#xff1f; 要不怎么说硬刚苹果 还得看华为 就跟你同天怎么了&#xff1f; 拼创新、拼技术、拼热度 你就说哪比你差吧&#xff1f…

基于VUE的校园二手物品交易管理系统的设计与实现 (含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于VUE的校园二手物品交易管理系统8拥有两种角色 管理员&#xff1a;闲置物品管理、订单管理、用户管理 用户&#xff1a;登录注册、购物车、发布闲置物品、评论、发货、收货地址管理等…

电力设计院10大排行榜!这个大院屠榜!

今天晚上阅读了中国电力规划设计协会《2022年度电力勘测设计行业统计分析报告》&#xff0c;这本报告是依据协会会员企业统计报表数据进行编制分析的。报告共收集了167家勘测设计企业上报的数据信息&#xff0c;统计的企业数量较2021 年166家企业增加1 家。 按业务板块划分为&…

element ui form 表单出现英文提示的解决方案

场景再现&#xff1a; 在使用 form 表单的时候&#xff0c;一般都需要对表单元素进行验证&#xff0c;错误就出现在了这里&#xff0c;除了配置的错误信息&#xff0c;还会出现一个 英文校验提示&#xff0c;如下图&#xff1a; 解决方案 出现的原因是在el-form-item中使用…

Tensorflow2 如何扩展现有数据集(缩放、随机旋转、水平翻转、平移等),从而提高模型的准确率 -- Tensorflow自学笔记14

实际生活中的数据集&#xff0c;往往不是标准的数据&#xff0c;而是有倾斜角度、有旋转、有偏移的数据&#xff0c;为了提高数据集的真实性&#xff0c;提高模型预测的准确率&#xff0c;可以用ImageDataGenerator函数来扩展数据集 import tensorflow as tffrom tensorflow.k…

(二)ASP.NET Core WebAPI项目的启动地址设置

上一篇介绍了ASP.NET Core WebAPI项目创建&#xff0c;可参考&#xff1a; 1.webAPI的访问地址 1) 启动时&#xff0c;选择CoreWebAPI(项目名称)运行项目 可以看到打开浏览器后的地址是&#xff1a;applicationUrl"\"launchUrl 2) 启动时&#xff0c;选择IIS Expre…

Ansys Zemax | 在OpticStudio中仿真单模光纤耦合

附件下载 联系工作人员获取附件 准确分析耦合效率在光纤耦合系统的设计中至关重要。本文演示了如何在OpticStudio中使用多种光纤耦合效率分析。 概要 OpticStudio序列模式可以很好地模拟单模光纤耦合效率。本文演示了如何设置耦合系统&#xff0c;并研究了序列模式下可用于…

redis分布式锁和lua脚本

业务场景&#xff1a;多个线程对共同资源的访问&#xff1a;库存超卖/用户重复下单的原因 解决方法一&#xff1a;利用jvm内置锁&#xff0c;将非原子性操作变成原子性操作 Synchronized锁的是对象&#xff0c;对象必须是单例的。锁的是this,代表当前所在的类&#xff0c;这个…

RabbitMQ 基础架构流程 数据隔离 创建用户

介绍 publisher&#xff1a;消息发送者-exchange&#xff1a;交换机&#xff0c;复制路由的消息-queue&#xff1a;队列&#xff0c;存储消息consumer&#xff1a;消息的消费者 工作流程 publisher消息发送者 -> exchange 交换机 -> queue 队列 -> consumer 消息的消…

流动会场:以声学专利为核心的完美移动场地—轻空间

流动会场作为一种全新的活动场所选择&#xff0c;凭借其便捷的移动性与先进的声学设计&#xff0c;正逐渐成为各类演出、会议和文化活动的热门场地。其独特之处不仅在于搭建速度快、灵活性高&#xff0c;还在于其核心技术——声学专利的强大支持。 专利声学设计&#xff0c;打造…

【LeetCode】06.Z字形变换

题目要求 解题思路 首先映入我们脑海的就是暴力。这一方法可行&#xff0c;但是时间复杂度空间复杂度很高&#xff0c;因此我们使用找规律的方法。这样的话我们可以模拟插入下标&#xff0c;这样的话很容易发现首行和末行插入的位置刚好是d2*n-2&#xff0c;而中间行的两个位置…

windows下安装elasticSearch和kibana

下载es 下载地址官网 下载后是个压缩包(elasticsearch-8.15.0-windows-x86_64)&#xff0c;解压即可 启动 配置 改一下 /conf/jvm.options文件&#xff0c;最后加一行编码配置&#xff0c;这个是为了启动后防止控制台乱码 -Dfile.encodingGBK启动es 依赖jdk8环境&#xf…

【SQL笔试题】SN_1 连续登陆系列问题

简介 连续登陆天数场景描述是对一个特定情境或活动连续发生的天数进行详细的阐述。这种描述通常用于展示某个事件或活动的持续时间&#xff0c;以及它对参与者或环境产生的影响。 常见的应用场景&#xff1a; 用户留存分析&#xff1a;通过跟踪用户的连续登录天数&#xff0…