失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > winform自定义窗体边框样式模板(支持四周边框拖拽改变窗体大小 支持鼠标拖动头部移

winform自定义窗体边框样式模板(支持四周边框拖拽改变窗体大小 支持鼠标拖动头部移

时间:2020-10-16 16:06:44

相关推荐

winform自定义窗体边框样式模板(支持四周边框拖拽改变窗体大小 支持鼠标拖动头部移

winform自己的边框已经过时,但小伙伴们又觉得自定义太过麻烦。本文将手把手教你自定义winform边框样式,并提供源代码链接(可直接作为模板使用)。话不多说,直接上操作步骤。

先上一张完成截图

一:去除winform边框,添加主面板,添加窗体四边(可自定义宽度和颜色,支持拖拽改变窗体大小)

1、去除winform边框:将FormBorderStyle属性设置为none

2、添加主面板:在此面板中,你可以自己添加窗体头(主要包括窗体icon,title,最大最小化按钮,关闭按钮等)

3、在Form.cs文件中,写下下列代码(此节主要添加窗体四边边框,并使其支持拖拽改变窗体大小)

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 CustomForm{public partial class Form1 : Form{public Form1(){InitializeComponent();InitBorder();}private Point mousePoint = new Point();//鼠标所在位置(top,left)System.Windows.Forms.Label[] labels = new System.Windows.Forms.Label[4]; //上下左右边框集合private int lastWidth = 0; //上次窗体宽度(改变窗体大小时使用)private int lastHeight = 0; //上次窗体高度(改变窗体大小时使用)/// <summary>/// 初始化窗体边框/// </summary>void InitBorder(){labels[0] = new System.Windows.Forms.Label();labels[1] = new System.Windows.Forms.Label();labels[2] = new System.Windows.Forms.Label();labels[3] = new System.Windows.Forms.Label();labels[0].BackColor = labels[2].BackColor = labels[1].BackColor = labels[3].BackColor = Color.FromArgb(188, 182, 211); //边框颜色Controls.Add(labels[0]);Controls.Add(labels[1]);Controls.Add(labels[2]);Controls.Add(labels[3]);labels[0].Cursor = labels[2].Cursor = Cursors.SizeWE;labels[1].Cursor = labels[3].Cursor = Cursors.SizeNS;labels[0].MouseDown += BorderMouseDown;labels[1].MouseDown += BorderMouseDown;labels[2].MouseDown += BorderMouseDown;labels[3].MouseDown += BorderMouseDown;labels[0].MouseMove += WMouseMove;labels[2].MouseMove += EMouseMove;labels[1].MouseMove += NMouseMove;labels[3].MouseMove += SMouseMove;labels[0].Dock = DockStyle.Left;labels[2].Dock = DockStyle.Right;labels[1].Dock = DockStyle.Top;labels[3].Dock = DockStyle.Bottom;UpdateBorder();}/// <summary>/// 边框鼠标按压事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void BorderMouseDown(object sender, MouseEventArgs e){lastWidth = Width;lastHeight = Height;this.mousePoint.X = MousePosition.X;this.mousePoint.Y = MousePosition.Y;}/// <summary>/// 左边框拖动事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>/// <summary>/// 上边框拖动事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void WMouseMove(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){if (Width != MinimumSize.Width){Left = MousePosition.X;}this.Width = lastWidth - (Control.MousePosition.X - mousePoint.X);}}/// <summary>/// 右边框边框拖动事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void EMouseMove(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){this.Width = lastWidth + (Control.MousePosition.X - mousePoint.X);}}private void NMouseMove(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){if (Height != MinimumSize.Height){Top = MousePosition.Y;}this.Height = lastHeight - (Control.MousePosition.Y - mousePoint.Y);}}/// <summary>/// 下边框拖动事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void SMouseMove(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){this.Height = lastHeight + (Control.MousePosition.Y - mousePoint.Y);}}/// <summary>/// 自定义给窗体添加边框/// </summary>private void UpdateBorder(){labels[1].Height = labels[3].Height =2;labels[0].Width = labels[2].Width = 2;}}}

成功截图:

初始窗体

改变大小后窗体

二、添加窗体header和content

布局结构

页面效果:

这部分功能对应代码 (与上步代码放在一起即可正常使用)

/// <summary>/// 最小化按钮点击事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_minimize_Click(object sender, EventArgs e){WindowState = FormWindowState.Minimized;}/// <summary>/// 关闭按钮点击事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_close_Click(object sender, EventArgs e){Close();}/// <summary>/// 标题块按压事件(记住鼠标的位置)/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void pnl_titile_MouseDown(object sender, MouseEventArgs e){this.mousePoint.X = e.X;this.mousePoint.Y = e.Y;}/// <summary>/// 鼠标移动事件(根据鼠标按下的位置和鼠标移动后的位置 移动窗体)/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void pnl_titile_MouseMove(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){this.Top = Control.MousePosition.Y - mousePoint.Y;this.Left = Control.MousePosition.X - mousePoint.X;}}

各部分支持功能

至此,窗体自定义边框模板已完成。有需要的话,可以点击下面的链接获取源代码,如果觉得有帮助,请给予点赞或评论,转载的话注意标明出处,谢谢(~ ̄▽ ̄)~

源代码链接

链接:/s/1aLN6JtZkq_qrkI24a5qvKw

提取码:89gn

winform自定义窗体边框样式模板(支持四周边框拖拽改变窗体大小 支持鼠标拖动头部移动窗体)

如果觉得《winform自定义窗体边框样式模板(支持四周边框拖拽改变窗体大小 支持鼠标拖动头部移》对你有帮助,请点赞、收藏,并留下你的观点哦!

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