900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > winform无边框在panel上拖动窗口位置 改变窗口大小

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

时间:2024-03-17 13:51:33

相关推荐

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

将窗体的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 ponentModel;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;}}}}

项目源文件

/download/qq_37341685/72212588

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。