winform自定义窗体边框样式模板(支持四周边框拖拽改变窗体大小,支持鼠标拖动头部移动窗体) |
您所在的位置:网站首页 › winform放大缩小 › winform自定义窗体边框样式模板(支持四周边框拖拽改变窗体大小,支持鼠标拖动头部移动窗体) |
winform自己的边框已经过时,但小伙伴们又觉得自定义太过麻烦。本文将手把手教你自定义winform边框样式,并提供源代码链接(可直接作为模板使用)。话不多说,直接上操作步骤。 先上一张完成截图 一:去除winform边框,添加主面板,添加窗体四边(可自定义宽度和颜色,支持拖拽改变窗体大小) 1、去除winform边框:将FormBorderStyle属性设置为none 2、添加主面板:在此面板中,你可以自己添加窗体头(主要包括窗体icon,title,最大最小化按钮,关闭按钮等) 3、在Form.cs文件中,写下下列代码(此节主要添加窗体四边边框,并使其支持拖拽改变窗体大小) 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 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; //上次窗体高度(改变窗体大小时使用) /// /// 初始化窗体边框 /// 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(); } /// /// 边框鼠标按压事件 /// /// /// private void BorderMouseDown(object sender, MouseEventArgs e) { lastWidth = Width; lastHeight = Height; this.mousePoint.X = MousePosition.X; this.mousePoint.Y = MousePosition.Y; } /// /// 左边框拖动事件 /// /// /// /// /// 上边框拖动事件 /// /// /// 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); } } /// /// 右边框边框拖动事件 /// /// /// 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); } } /// /// 下边框拖动事件 /// /// /// private void SMouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { this.Height = lastHeight + (Control.MousePosition.Y - mousePoint.Y); } } /// /// 自定义给窗体添加边框 /// private void UpdateBorder() { labels[1].Height = labels[3].Height =2; labels[0].Width = labels[2].Width = 2; } } } 成功截图: 初始窗体 改变大小后窗体 二、添加窗体header和content 布局结构 页面效果: 这部分功能对应代码 (与上步代码放在一起即可正常使用) /// /// 最小化按钮点击事件 /// /// /// private void btn_minimize_Click(object sender, EventArgs e) { WindowState = FormWindowState.Minimized; } /// /// 关闭按钮点击事件 /// /// /// private void btn_close_Click(object sender, EventArgs e) { Close(); } /// /// 标题块按压事件(记住鼠标的位置) /// /// /// private void pnl_titile_MouseDown(object sender, MouseEventArgs e) { this.mousePoint.X = e.X; this.mousePoint.Y = e.Y; } /// /// 鼠标移动事件(根据鼠标按下的位置和鼠标移动后的位置 移动窗体) /// /// /// 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; } } 各部分支持功能至此,窗体自定义边框模板已完成。有需要的话,可以点击下面的链接获取源代码,如果觉得有帮助,请给予点赞或评论,转载的话注意标明出处,谢谢(~ ̄▽ ̄)~ 源代码链接 链接:https://pan.baidu.com/s/1aLN6JtZkq_qrkI24a5qvKw 提取码:89gn |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |