WinForm 美化秘籍:轻松实现 Panel 圆角虚线边框

文章目录

  • 1、引言
  • 2、案例实现
    • 1、创建自定义 Panel 类
    • 2、定义圆角矩形
    • 3. 使用自定义 Panel
    • 4. 调整属性
    • 5、使用背景图片来实现
    • 5、拓展:使用 Panel 的 Paint重绘单独实现虚线边框效果
  • 3、实现效果
  • 4、总结


1、引言

在 Winform 应用程序开发中,美化用户界面(UI)是提升用户体验的关键。默认情况下,Panel 控件的边框样式较为单调,无法满足一些个性化的设计需求。如果你希望为你的应用程序增添一丝独特的风格,不妨考虑给 Panel 添加圆角和虚线边框。本文将带你一步步了解如何通过自定义绘制来实现这一效果。

2、案例实现

1、创建自定义 Panel 类

我们首先需要创建一个继承自 Panel 的新类 CustomPanel,并在其中重写 OnPaint 方法,以便我们可以控制面板的绘制方式。为了确保控件在调整大小时正确重绘,我们还需要设置 DoubleBuffered 属性并启用 ResizeRedraw 样式。

public class CustomPanel : Panel
{private Pen _borderPen = new Pen(Color.Black, 2) { DashStyle = System.Drawing.Drawing2D.DashStyle.Dash };private int _cornerRadius = 10;public CustomPanel(){this.DoubleBuffered = true;this.SetStyle(ControlStyles.ResizeRedraw, true);}protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);GraphicsPath path = GetRoundedRectangle(this.ClientRectangle, _cornerRadius);this.Region = new Region(path);// 绘制虚线边框e.Graphics.DrawPath(_borderPen, path);}
}

2、定义圆角矩形

为了让 Panel 具有圆角效果,我们需要定义一个方法 GetRoundedRectangle 来生成一个带有圆角的 GraphicsPath。这个路径将在 OnPaint 方法中被用来裁剪控件的区域,并作为绘制边框的基础。

private GraphicsPath GetRoundedRectangle(Rectangle bounds, int radius)
{int diameter = radius * 2;Size size = new Size(diameter, diameter);Rectangle arc = new Rectangle(bounds.Location, size);GraphicsPath path = new GraphicsPath();if (radius == 0){path.AddRectangle(bounds);return path;}// Top left arcpath.AddArc(arc, 180, 90);// Top right arcarc.X = bounds.Right - diameter;path.AddArc(arc, 270, 90);// Bottom right arcarc.Y = bounds.Bottom - diameter;path.AddArc(arc, 0, 90);// Bottom left arcarc.X = bounds.Left;path.AddArc(arc, 90, 90);path.CloseFigure();return path;
}

3. 使用自定义 Panel

创建好 CustomPanel 后,你可以在设计器中添加它,或者在代码中动态实例化。如果想要在设计器中看到自定义属性,可以将类放在一个可识别的地方,如项目中的单独文件。

4. 调整属性

_borderPen 可以用来设置边框的颜色、宽度和样式。
_cornerRadius 用于控制圆角的半径大小。你可以将其设为公开属性,以便在属性窗口中调整。

5、使用背景图片来实现

Panel 圆角虚线边框 也可以通过背景图片来实现这一效果。准备圆角虚线边框的png 图片,设置 Panel 面板的背景图片为虚线边框图片即可。
在这里插入图片描述
在这里插入图片描述

5、拓展:使用 Panel 的 Paint重绘单独实现虚线边框效果

 private void panel1_Paint(object sender, PaintEventArgs e){Graphics g = e.Graphics;Pen pen = new Pen(Color.Black, 1); // 设置虚线颜色和粗细pen.DashStyle = DashStyle.Dot; // 设置虚线样式// 绘制虚线边框g.DrawRectangle(pen, this.panel1.ClientRectangle.Left, this.panel1.ClientRectangle.Top,this.panel1.ClientRectangle.Width - 1, this.panel1.ClientRectangle.Height - 1);pen.Dispose(); // 释放Pen对象}

注意:这里设计界面中Panel 的 BorderStyle 设置 为 None 。

3、实现效果

在这里插入图片描述

4、总结

通过上述简单的几个步骤,我们就能够为 WinForms 应用程序中的 Panel 控件添加漂亮的圆角和虚线边框,从而显著提升应用的视觉吸引力。无论是用于个人项目还是企业级应用,这种定制化的 UI 元素都能让您的应用程序脱颖而出。希望这篇文章能为正在寻找 UI 美化解决方案的开发者们提供一些灵感和帮助。

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

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

相关文章

Spring Cloud LoadBalancer (负载均衡)

目录 什么是负载均衡 服务端负载均衡 客户端负载均衡 Spring Cloud LoadBalancer快速上手 启动多个product-service实例 测试负载均衡 负载均衡策略 自定义负载均衡策略 什么是负载均衡 负载均衡(Load Balance,简称 LB) , 是高并发, 高可用系统必不可少的关…

OpenCloudOS简介

OpenCloudOS是一款开源的云操作系统,具有诸多特性和优势,广泛应用于多个领域。 一、项目背景 开源社区发起:由操作系统、云平台、软硬件厂商与个人共同倡议发起的操作系统社区项目,旨在打造全面中立、开放、安全、稳定易用、高…

NLP 中文拼写检测纠正论文 Automatic-Corpus-Generation

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法,如果提升 100W 倍的性能? NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊! 一个提升英文单词拼…

区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】

区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability 区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】1.1 漏洞合约1.2 漏洞分析1.3 攻击步骤分析1.4 攻击合约 区块链安全常见的攻击合约和…

留学生交流互动系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

算法基础一:冒泡排序

一、冒泡排序 1、定义 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。 …

跨域请求问题

跨域请求简介 跨域请求:通过一个域的JavaScript脚本和另外一个域的内容进行交互 域的信息:协议、域名、端口号 同域:当两个域的协议、域名、端口号均相同 如下所示: 同源【域】策略:在浏览器中存在一种安全策略就是…

C++“STL之String”

​ 🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:C入门 目录 ​编辑 前言 一、STL简介 1.1 STL是什么? 1.2 STL的版本(这个不是很重要了解即可) 1.3 STL的六大组件 二…

2-199基于Matlab-GUI的混合粒子群算法求解TSP问题

基于Matlab-GUI的混合粒子群算法求解TSP问题,多种路径可选,可设置微粒数目、迭代次数,动态展示路径规划过程及迭代曲线,得到叫佳的路径,输出最优路径序列及最终距离。程序已调通,可直接运行。 2-199基于Ma…

【ArcGIS Pro】完整的nc文件整理表格模型构建流程及工具练习数据分享

学术科研啥的要用到很多数据,nc文件融合了时间空间数据是科研重要文件。之前分享过怎样将nc文件处理成栅格后整理成表格。小编的读者还是有跑不通整个流程的,再来做一篇总结篇,也分享下练习数据跟工具,如果还是弄不了的&#xff0…

VM虚拟机配置ubuntu网络

目录 桥接模式 NAT模式 桥接模式 特点:ubuntu的IP地址与主机IP的ip地址不同 第一部分:VM虚拟机给ubuntu的网络适配器,调为桥接模式 第二部分:保证所桥接的网络可以上网 第三部分:ubuntu使用DHCP(默认&…

评分模型在路网通勤习惯分析中的应用——启发式搜索(2)

接上文《评分模型在路网通勤习惯分析中的应用——提出问题(1)》,本文内容主要针对上文提出的问题解决思路,详细讨论每一步骤中的具体处理措施。 4、问题的详细解决过程 4.1、对地图数据进行结构化 地图的本质是一种有向加权图结…

Lecture 17

10’s Complement Representation 主要内容: 1. 10’s 补码表示: • 10’s 补码表示法需要指定表示的数字位数(用 n 表示)。 • 表示的数字取决于 n 的位数,这会影响具体数值的解释。 2. 举例: • 如果采用 3 位补码&…

【Hackthebox 中英 Write-Up】Web Request | 分析 HTTP 请求和响应

欢迎来到我的writeup分享!我希望大家不要只关注结果或答案,而是通过耐心阅读,尝试逆向工程理解背后的运作原理。在这里,你不仅能找到解题的思路,还能学到更多与Hack The Box等平台相关的技术和技巧,期待与你…

PPT画图——如何设置导致图片为600dpi

winr,输入regedit打开注册表 按路径找,HKEY_CURRENT_USER\Software\Microsoft\Office\XX.0\PowerPoint\Options(xx为版本号,16.0 or 15.0或则其他)。名称命名:ExportBitmapResolution 保存即可,…

电商项目-数据同步解决方案(三)商品上架同步更新ES索引库

一、 需求分析和业务逻辑 主要应用技术有:Feign远程调用, 消息队列-RabbitMQ ,分布式搜索引擎-ElasticSearch,Eureka,Canal 商品上架将商品的sku列表导入或者更新索引库。 数据监控微服务需要定义canal监听器&#x…

Unity游戏环境交互系统

概述 交互功能使用同一个按钮或按钮列表,在不同情况下显示不同的内容,按下执行不同的操作。 按选项个数分类 环境交互系统可分为两种,单选项交互,一般使用射线检测;多选项交互,一般使用范围检测。第一人…

前端正在被“锈”化

jeff Atwood 在 2007 年说:"any application that can be writen in JavaScript , willeventually be written in JavaScript",翻译过来就是:“任何可以使用 JavaScript 来编写的应用,并最终也会由 JavaScript 编写”&a…

穷举vs暴搜vs深搜vs回溯vs剪枝_全排列_子集

46. 全排列 递归解决:一开始选一个数,递归进入下一层再选一个新的数,直到到最后一个数。反会上一层遍历其它数。 每次递归到叶子节点就找到了一种组合,思路有了具体怎么实现? 1.怎么记录每条路径? 定义一个…