winform无边框在panel上拖动窗口位置,改变窗口大小

article/2025/10/14 22:28:18

在这里插入图片描述
将窗体的FormBorderStyles属性设置为None

在这里插入图片描述
窗体上放一个新的panel,设置Dock属性为Fill

创建变量

private bool isMouseDown = false;//表示鼠标当前是否处于按下状态,初始值为否 MouseDirection direction = MouseDirection.None;//表示拖动的方向,起始为None,表示不拖动private Point mPoint;//鼠标坐标private bool zhuangtai = true;//是否是改变窗体大小,true为不是,false为是

添加枚举

//定义一个枚举,表示拖动方向
public enum MouseDirection
{Herizontal,//水平方向拖动,只改变窗体的宽度   Vertical,//垂直方向拖动,只改变窗体的高度 Declining,//倾斜方向,同时改变窗体的宽度和高度None//不做标志,即不拖动窗体改变大小
}

panel生成MouseDown事件

private void panel1_MouseDown(object sender, MouseEventArgs e)
{mPoint = new Point(e.X, e.Y);isMouseDown = true;
}

panel生成MouseUp事件

private void panel1_MouseUp(object sender, MouseEventArgs e)
{// 鼠标弹起,isMouseDown = false;//既然鼠标弹起了,那么就不能再改变窗体尺寸,拖拽方向置 nonedirection = MouseDirection.None;
}

panel生成MouseMove事件

private void panel1_MouseMove(object sender, MouseEventArgs e)
{//鼠标移动过程中,坐标时刻在改变 //当鼠标移动时横坐标距离窗体右边缘5像素以内且纵坐标距离下边缘也在5像素以内时,要将光标变为倾斜的箭头形状,同时拖拽方向direction置为MouseDirection.Declining if (e.Location.X >= this.Width - 5 && e.Location.Y > this.Height - 5){this.Cursor = Cursors.SizeNWSE;direction = MouseDirection.Declining;zhuangtai = false;}else if (e.Location.X >= this.Width - 5)//当鼠标移动时横坐标距离窗体右边缘5像素以内时,要将光标变为倾斜的箭头形状,同时拖拽方向direction置为MouseDirection.Herizontal else if (e.Location.X >= this.Width - 5) {this.Cursor = Cursors.SizeWE;direction = MouseDirection.Herizontal;zhuangtai = false;}else if (e.Location.Y > this.Height - 5)//同理当鼠标移动时纵坐标距离窗体下边缘5像素以内时,要将光标变为倾斜的箭头形状,同时拖拽方向direction置为MouseDirection.Vertical else if (e.Location.Y >= this.Height - 5) {this.Cursor = Cursors.SizeNS;direction = MouseDirection.Vertical;zhuangtai = false;}else{//否则,以外的窗体区域,鼠标星座均为单向箭头(默认) elsethis.Cursor = Cursors.Arrow;zhuangtai = true;}//判断是移动窗口还是拖动窗口大小if (zhuangtai){if (e.Button == MouseButtons.Left){this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);return;}}else{//设定好方向后,调用下面方法,改变窗体大小 ResizeWindow();}
}

全部代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApp4
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private bool isMouseDown = false;//表示鼠标当前是否处于按下状态,初始值为否 MouseDirection direction = MouseDirection.None;//表示拖动的方向,起始为None,表示不拖动private Point mPoint;//鼠标坐标private bool zhuangtai = true;//是否是改变窗体大小,true为不是,false为是//定义一个枚举,表示拖动方向public enum MouseDirection{Herizontal,//水平方向拖动,只改变窗体的宽度   Vertical,//垂直方向拖动,只改变窗体的高度 Declining,//倾斜方向,同时改变窗体的宽度和高度None//不做标志,即不拖动窗体改变大小}private void panel1_MouseDown(object sender, MouseEventArgs e){mPoint = new Point(e.X, e.Y);isMouseDown = true;}private void panel1_MouseUp(object sender, MouseEventArgs e){// 鼠标弹起,isMouseDown = false;//既然鼠标弹起了,那么就不能再改变窗体尺寸,拖拽方向置 nonedirection = MouseDirection.None;}private void panel1_MouseMove(object sender, MouseEventArgs e){//鼠标移动过程中,坐标时刻在改变 //当鼠标移动时横坐标距离窗体右边缘5像素以内且纵坐标距离下边缘也在5像素以内时,要将光标变为倾斜的箭头形状,同时拖拽方向direction置为MouseDirection.Declining if (e.Location.X >= this.Width - 5 && e.Location.Y > this.Height - 5){this.Cursor = Cursors.SizeNWSE;direction = MouseDirection.Declining;zhuangtai = false;}else if (e.Location.X >= this.Width - 5)//当鼠标移动时横坐标距离窗体右边缘5像素以内时,要将光标变为倾斜的箭头形状,同时拖拽方向direction置为MouseDirection.Herizontal else if (e.Location.X >= this.Width - 5) {this.Cursor = Cursors.SizeWE;direction = MouseDirection.Herizontal;zhuangtai = false;}else if (e.Location.Y > this.Height - 5)//同理当鼠标移动时纵坐标距离窗体下边缘5像素以内时,要将光标变为倾斜的箭头形状,同时拖拽方向direction置为MouseDirection.Vertical else if (e.Location.Y >= this.Height - 5) {this.Cursor = Cursors.SizeNS;direction = MouseDirection.Vertical;zhuangtai = false;}else{//否则,以外的窗体区域,鼠标星座均为单向箭头(默认) elsethis.Cursor = Cursors.Arrow;zhuangtai = true;}//设定好方向后,调用下面方法,改变窗体大小  if (zhuangtai){if (e.Button == MouseButtons.Left){this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);return;}}else{ResizeWindow();}}private void ResizeWindow(){//这个判断很重要,只有在鼠标按下时才能拖拽改变窗体大小,如果不作判断,那么鼠标弹起和按下时,窗体都可以改变 if (!isMouseDown)return;//MousePosition的参考点是屏幕的左上角,表示鼠标当前相对于屏幕左上角的坐标this.left和this.top的参考点也是屏幕,属性MousePosition是该程序的重点if (direction == MouseDirection.Declining){//此行代码在mousemove事件中已经写过,在此再写一遍,并不多余,一定要写this.Cursor = Cursors.SizeNWSE;//下面是改变窗体宽和高的代码,不明白的可以仔细思考一下this.Width = MousePosition.X - this.Left;this.Height = MousePosition.Y - this.Top;}//以下同理if (direction == MouseDirection.Herizontal){this.Cursor = Cursors.SizeWE;this.Width = MousePosition.X - this.Left;}else if (direction == MouseDirection.Vertical){this.Cursor = Cursors.SizeNS;this.Height = MousePosition.Y - this.Top;}//即使鼠标按下,但是不在窗口右和下边缘,那么也不能改变窗口大小 else {this.Cursor = Cursors.Arrow;}}}
}

项目源文件
https://download.csdn.net/download/qq_37341685/72212588


http://chatgpt.dhexx.cn/article/UT5SW74u.shtml

相关文章

C# Winform Panel 内控件大小不随Panel大小改变设置

(1)将Anchor属性设置为:None (2)将AutoSize属性设置为:False 不过还存在一个问题点,就是Button的位置还是会随着Panel大小变化而改变。

Panel控件

今天小编来给大家介绍一下panel控件; 首先来看一下panel控件是什么? 是什么: Panel 控件提供了一种用于组织控件的分组机制。Panel 控件可被递归嵌套在 Form 控件(Panel 控件最外面的容器)中。面板呈现它本身包含的控件。 面板上…

UI的Panel面板

1.Panel panel控件又叫面板,该面板实际就是一个容器,在其上可放置其他UI控件 当移动该面板时,放在其中的UI控件会随着移动,这样更加合理与方便地移动与处理一组控件 当面板被创建时,会默认包含一个Image(Script) Sour…

Unity Panel 控件

Panel 容器组件又叫面板组件,实际上就是一个容器,在其中可以放置其他的UI元素。 注意,在Unity中,子物体的位置是相对于父物体的,而非绝对位置 在Panel的参数区中,除了空间位置这个常用参数外,我…

Linux系统之部署Linux管理面板1Panel

Linux系统之部署Linux管理面板1Panel 一、1Panel介绍1.1Panel简介2.1Panel特点 二、本地环境规划1.本此实践目的2.本地环境规划 三、检查本地环境1.检查操作系统版本2.检查系统内核版本 四、部署1Panel1.创建安装目录2.一键部署1Panel3.检查1Panel服务运行状态4.检查1Panel监听…

javasocket编程(javasocket通信)

Java网络编程-JavaSocket编程是什么呢? Socket传输模式 Sockets有两种主要的操作方式:面向连接的和无连接的。面向连接的sockets操作就像一部电话,他们必须建立一个连接和一人呼叫。所有的事情在到达时的顺序与它们出发时的顺序时…

(Android)JavaSocket编程,文件上传到服务器,客户端Android,服务器端J2SE

SD卡中有encrypt.png文件 在E盘可以看到,从模拟器SD卡中发送来的文件 服务器端代码,我这里是使用CMD命令演示的。服务端等待客户端连接,然后接收客户端的数据。包括文件名,大小,和文件数据。 import java.io.Buffered…

Java Socket实现文件传输

阿里云双11服务器优惠(年度最佳优惠): A:1核2GB 1M 服务器年69元 B:1核2GB 1M 服务器三年180元 C:2核4GB 1~10M 服务器三年567元(强烈推荐) D:4核8GB 1~10M 服务器三年10…

Java Tcp(Socket、ServerSocket)

TCP所提供服务的主要特点: 面向连接的传输;端到端的通信;高可靠性,确保传输数据的正确性,不出现丢失或乱序;全双工方式传输;采用字节流方式,即以字节为单位传输字节序列&#xff1b…

【Socket】Java Socket通信(一)

前段时间在网上学习了Java Socket的应用编程。 端口 用于区分不同应用程序端口号范围065535,其中01023为系统所保留IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础http:…

java socket编程总结

java socket编程总结 说明一、TCP/IP协议模型二、获取IP相关信息InetAddressInetSocketAddressURL 三、TCP编程四、UDP编程五、关于TCP与UDP 说明 更新时间:2020/12/01 17:17,更新完基本内容 java的socket编程做一个总结,主要是面向Tcp和Ud…

Java Socket网络编程,你要的实验,我都有

JAVA Socket编程 目录 JAVA Socket编程多人聊天室客户端源代码服务器端源代码运行展示 邮件发送客户端运行展示 在线云笔记客户端窗口服务器端代码运行展示 多人聊天室 客户端源代码 import java.awt.BorderLayout; import java.awt.HeadlessException; import java.awt.event…

【Java高级】初探socket编程 ——JavaSocket连接与简单通信

新学期生活开始一段时间了,要继续学习一些新的技术(这里指socket /doge),目标是尝试完成一个在线即时聊天的小程序(尽量不咕)。会更新一系列socket编程的技术文章,欢迎关注交流~ 那么千里之行&…

Java--Socket通信(双向,有界面)

服务端: import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr…

JAVA 网络编程 Socket

网络:相互连接的计算机,带来的好处有共享资源,交换数据 IP地址:定位计算机地址 通常由网络地址主机地址组合 查看本机IP地址:电脑左下角输入CMD,回车在CMD界面输入ipconfig 127.0.0.1 测试本机网络配置 …

初识Java Socket编程

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。下面就让我们一起揭开Socket的神秘面纱。…

Java socket详解,看这一篇就够了

刚给大家讲解Java socket通信后,好多童鞋私信我,有好多地方不理解,看不明白。特抽时间整理一下,详细讲述Java socket通信原理和实现案例。整个过程楼主都是通过先简单明了的示例让大家了解整个基本原理,后慢慢接近生产…

递归下降文法C语言实验报告,递归下降分析法的简单例子的c语言实现

我们举的简单例子是 G[s]: S → a | ∧ | (T) T→T, S | S 转化为LL1文法 S →a |∧| (T) T →ST T→,ST| ε c语言代码实现 #include char scaner(char*input,int* p); void S(char*input,int* p); void T(char*input,int* p); void T1(char*input,int* p); void error(); int…

C++:编译实验之递归下降分析器

一、实验目的 1.加深对递归下降分析法一种自顶向下的语法分析方法的理解。 2.根据文法的产生式规则消除左递归,提取公共左因子构造出相应的递归下降分析器。 二、实验内容 根据课堂讲授的形式化算法,编制程序实现递归下降分析器,能对常见…

递归下降分析程序的设计和实现

递归下降分析程序的设计和实现 一、实验的目的和要求 1、了解语法分析的主要任务。 2、实现基本的递归下降分析器,能够分析任意的符号串是否为该文法所定义的合法算术表达式。二、实验环境 Windows7 Dev-C三、实验准备 先将递归下降分析程序的生成认真的学习一…