C#如何实现自定义圆角按钮
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章给大家分享的是有关C#如何实现自定义圆角按钮的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Winform中自带的button没有圆角属性,所以我们继承Button类
千家信息网最后更新 2025年01月19日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安全错误
数据库的锁怎样保障安全
农安通用网络技术质量保证
服务器刀箱是什么
激活畅连时服务器异常
软件开发上海工资水平
网络安全黑板报简单头像
软件开发公司概述
长春市云服务器试用
数据库基础与应用终结性考试
java 实现数据库轮询
如何才能提升网络安全技术
虚拟专用网络技术视频
福州网信办网络安全
查找数据库中所有对象
当当网数据库下载
电脑版的服务器可以装模组吗
蒙商银行服务器招标文件
万方数据库的主要收录特点是什么
RTSP到WEB服务器转码
常用的计算机网络安全
服务器odm 前景
长沙超鸿电脑软件开发公司
长春青少年网络安全周
英国海外政策文件数据库
软件开发的起什么名字好
路由器显示远程服务器无法连接
软件开发公司交多少税金
软件开发和运营是同一家公司
河源软件开发外包
安全狗服务器防护软件
学校网络安全管理报告