C#如何实现自定义圆角按钮
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章给大家分享的是有关C#如何实现自定义圆角按钮的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Winform中自带的button没有圆角属性,所以我们继承Button类
千家信息网最后更新 2025年11月08日C#如何实现自定义圆角按钮
这篇文章给大家分享的是有关C#如何实现自定义圆角按钮的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
Winform中自带的button没有圆角属性,所以我们继承Button类,重写OnPaint事件来绘制圆角按钮。
1.绘制圆角按钮框需要用到系统自带的绘制方法:首先引入Gdi32.dll中的CreateRoundRectRgn方法。经过验证此方法在大量控件情况下使用,会导致GDI+绘图问题!现在改用自己绘制的圆角GraphicsPath进行填充显示,效果更好,圆角更圆润了!
重写OnPaint方法:
protected override void OnPaint(PaintEventArgs pe) { if (!roundCorner) { base.OnPaint(pe); return; } Graphics g = pe.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias; //g.SmoothingMode = SmoothingMode.HighQuality; //g.CompositingQuality = CompositingQuality.HighQuality; //g.InterpolationMode = InterpolationMode.HighQualityBicubic; Rectangle rect = this.ClientRectangle; Brush brhBorder = new SolidBrush(crBorderPainting); Brush brhRect = new SolidBrush(BackColor); Brush b0 = new SolidBrush(this.Parent.BackColor); Brush bfont = new SolidBrush(ForeColor); try { g.Clear(this.Parent.BackColor); int borderSize = FlatAppearance.BorderSize; try { GraphicsPath path = CreateRoundRect(rect.Left, rect.Top, rect.Left + rect.Width - borderSize, rect.Top + rect.Height - borderSize); g.FillPath(brhBorder, path); path.Dispose(); path = CreateRoundRect(rect.Left + borderSize /2f, rect.Top + borderSize / 2f, rect.Left + rect.Width - borderSize * 2, rect.Top + rect.Height - borderSize * 2); g.FillPath(brhRect, path); path.Dispose(); } catch (Exception e) { Console.WriteLine("FillPath:" + e.Message); } if (this.Text != string.Empty) { StringFormat sf = StringFormat.GenericTypographic; sf.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces; SizeF sizeoftext = g.MeasureString(this.Text, Font); float tx = (float)((this.Width - sizeoftext.Width) / 2.0); float ty = (float)((this.Height - sizeoftext.Height) / 2.0); g.DrawString(this.Text, Font, bfont, tx, ty); } } finally { b0.Dispose(); brhBorder.Dispose(); brhRect.Dispose(); bfont.Dispose(); } }private GraphicsPath CreateRoundRect(float rleft, float rtop, float rwidth, float rheight) { float r = radius; if (rwidth < rheight) { if (radius > rwidth / 2f) r = rwidth / 2f; } else { if (radius > rheight / 2f) r = rheight / 2f; } GraphicsPath path; RectangleF rectRow = new RectangleF(rleft, rtop + r, rwidth, rheight - r * 2); RectangleF rectColumn = new RectangleF(rleft + r, rtop, rwidth - r * 2, rheight); path = new GraphicsPath(FillMode.Winding); path.AddRectangle(rectRow); path.AddRectangle(rectColumn); //左上 path.AddEllipse(rleft, rtop, r * 2, r * 2); //右上 path.AddEllipse(rleft + rwidth - r * 2, rtop, r * 2, r * 2); //左下 path.AddEllipse(rleft, rtop + rheight - r * 2, r * 2, r * 2); //右下 path.AddEllipse(rleft + rwidth - r * 2, rtop + rheight - r * 2, r * 2, r * 2); return path; }2.如果需要增加悬浮效果,可以重写OnMouseEnter、OnMouseLeave事件来改变边界及背景色。
private Color crBorderActive = Color.FromArgb(Convert.ToInt32("FF3283C4", 16));private Color crRectActive = Color.FromArgb(Convert.ToInt32("FFE3F3FB", 16));private Color crBorderDefault = Color.FromArgb(215, 215, 215);protected override void OnMouseEnter(EventArgs e) { base.OnMouseEnter(e); this.BackColor = crRectActive; this.FlatAppearance.BorderColor = crBorderActive; } protected override void OnMouseLeave(EventArgs e) { base.OnMouseLeave(e); this.BackColor = Color.White; this.FlatAppearance.BorderColor = crBorderDefault; }至此一个圆角按钮就完成了^_^。效果如下:

感谢各位的阅读!关于"C#如何实现自定义圆角按钮"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
圆角
按钮
效果
方法
C#
事件
内容
更多
篇文章
不错
圆润
实用
属性
情况
控件
文章
此方法
看吧
知识
系统
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中国电科国家网络安全
一台服务器能接入多少监控
局关于云服务器租赁采购讨论事宜
ios没有安卓软件开发
opc服务器需要配置多大内存
在富士康软件开发
软件开发属于吃青春饭吗
连云港dns服务器
战地5怎么自己开社区服务器
服务器阵列加硬盘
node数据库映射框架
朝洋网络技术公司
软件开发分享主题
mysql数据库优化方法
林业网络安全等级保护
2019电脑一级网络安全
联想g525服务器
网络技术有限公司纳税税点
社区医院网络安全
二维码获取数据库原理
施工软件开发与应用龙头
数据库驱动开发
腾讯云数据库怎么用
在数据库怎么删除project
上海软件开发区
梦幻限时服务器星期天限制吗
静安区辅助网络技术答疑解惑
ibm服务器进管理界面
软件开发需求说明需要原型吗
高斯数据库收集统计信息