C#Winform拓展控件之Panel
本文在继承自带的Panel的基础上,进行了一点拓展,实现了panel背景的渐变填充以及边框的圆角设置。
效果如下:
属性栏:
实现原理也很简单:
在onpaint事件内进行重绘,首先进行渐变的填充,用LinearGradientBrush 渐变颜色的笔刷,填充整个空间,再绘制出圆角区域就行了。
代码附上:
/// <summary>/// 渐变背景颜色panel/// </summary>[ToolboxBitmap(typeof(System.Windows.Forms.Panel))][Description("拓展 Panel 可实现背景渐变颜色 边框圆角")]public partial class yPanelGradual : Panel{#region 变量定义private Color startColor = Color.Lime; // 渐变填充起始色private Color endColor = Color.Blue; // 渐变填充结束颜色private float angle = 45f;// 渐变填充绘制角度private Color borderColor = Color.Black;//边框颜色private int borderSize = 2;//边框粗细private int radious = 40; // 边框圆角大小 #endregion #region 构造函数 /// <summary>/// 渐变填充 边框设置的panel/// </summary>public yPanelGradual(){InitializeComponent(); }#endregion#region 自定属性/// <summary>/// 渐变填充起始颜色/// </summary>[Category("1、自定属性"), Description("渐变填充起始颜色")]public Color StartColor{get{return startColor;} set{startColor = value;this.Invalidate();}}/// <summary>/// 渐变填充结束颜色/// </summary>[Category("1、自定属性"), Description("渐变填充结束颜色")]public Color EndColor{get{return endColor;} set{endColor = value;this.Invalidate();}}/// <summary>/// 渐变填充角度/// </summary>[Category("1、自定属性"), Description("渐变填充角度")]public float Angle{get{return angle;} set{angle = value;this.Invalidate();}}/// <summary>/// 隐藏之前的BackColor/// </summary>[Browsable(false)]public override Color BackColor{get{return base.BackColor;} set{base.BackColor = value;}}/// <summary>/// 边框颜色/// </summary>[Category("1、自定属性"), Description("边框颜色")]public Color BorderColor{get{return borderColor;} set{borderColor = value;this.Invalidate();}}/// <summary>/// 边框粗细(1-3)/// </summary>[Category("1、自定属性"), Description("边框粗细(1-3)")]public int BorderSize{get{return borderSize;} set{if (value < 1) value = 1;if (value > 3) value = 3;borderSize = value;this.Invalidate();}}/// <summary>/// 圆角弧度 1-90 ; 控制着控件的最小大小/// </summary>[Category("1、自定属性"), Description("圆角弧度,1-90;控制着控件的最小大小")]public int Radious{get{return radious;} set{if (value < 1) value = 1;if (value > 90) value = 90;radious = value;// 设置最小大小 使其不会出现圆角交叉的现象this.MinimumSize = new Size(radious, radious);this.Invalidate();}}/// <summary>/// 内部字体/// </summary>[Category("1、自定属性"), Description("内部字体")]public override Font Font{get{return base.Font;} set{base.Font = value;}}/// <summary>/// 内部字体颜色/// </summary>[Category("1、自定属性"), Description("内部字体颜色")]public override Color ForeColor{get{return base.ForeColor;}set{base.ForeColor = value;}}#endregion#region 事件重写/// <summary>/// /// </summary>/// <param name="e"></param>protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;LinearGradientBrush linearBrush = new LinearGradientBrush(ClientRectangle, startColor, endColor, angle);e.Graphics.FillRectangle(linearBrush, ClientRectangle);RectangleF rectBorder = new RectangleF(0.5F, 0.5F, this.Width - 1.5F, this.Height - 1.5F);using (GraphicsPath pathSurface = GetFigurePath(rectBorder, radious))using (Pen penBorder = new Pen(borderColor, borderSize)) {this.Region = new Region(pathSurface);e.Graphics.DrawPath(penBorder, pathSurface); }}/// <summary>/// 获取带圆角的边框/// </summary>/// <param name="rect"></param>/// <param name="radious"></param>/// <returns></returns>private GraphicsPath GetFigurePath(RectangleF rect, float radious){GraphicsPath path = new GraphicsPath();path.StartFigure();path.AddArc(rect.X, rect.Y, radious, radious, 180, 90);path.AddArc(rect.Width - radious, rect.Y, radious, radious, 270, 90);path.AddArc(rect.Width - radious, rect.Height - radious, radious, radious, 0, 90);path.AddArc(rect.X, rect.Height - radious, radious, radious, 90, 90);path.CloseFigure();return path;}#endregion}
C#Winform拓展控件之Panel相关推荐
- winformbutton边框怎么改_C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法
C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法 1.新建组件这里可以自定义一个Panel控件起名为PanelEx 2.增加一个BoderColor属性和BoderSize属性 pr ...
- WinForm的控件
WinForm的控件: -------------------- WinForm的控件: --------------------- 不同的控件类型: --------- ...
- DevExpress Winform 常用控件
前言 DevExpress 控件的功能比较强大,是全球知名控件开发公司,对于开发 B/S 或 C/S 都非常出色,可以实现很炫且功能强大的效果. DevExpress Winform 常用控件是本人在 ...
- Winform分页控件之纯分页显示处理
在之前介绍的Winform分页控件中,都以分页控件+显示表格控件作为一个整体性的控件,不可分开,这样做的目的是可以实现更多的操作,集成更多丰富的特性,减少我们开发的工作量,这种情况虽然适用于大多数的情 ...
- VB调用C#写的WinForm.NET控件
点击下载本文配套的演示程序代码http://files.cnblogs.com/xdesigner/VB-CS-WinformControl.zip. 一.前言: 虽然IT开发技术日新月异,不过业界仍 ...
- winform/timer控件/权限设置/三级联动
winform/timer控件/权限设置/三级联动 一.timer控件 组件--timer timer是一个线程,默认可以跨线程访问对象 属性:Enabled--可用性 Interval--间隔时间 ...
- winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法。
winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法. 参考文章: (1)winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解 ...
- 如何在多线程中调用winform窗体控件2——实例篇
如何在多线程中调用winform窗体控件2--实例篇 针对之前文章<如何在多线程中调用winform窗体控件>,下面举个我项目中的实际案例,这是一个我自定义控件在异步设置焦点时的代码.在新 ...
- winform 判断控件有没有被遮挡_编程入门基础之 winform(2)
在编程入门1中,我们通过WINFORM等控件画出了登录界面,我们今天写登录界面的登录按钮事件. 装修预算小程序登录按钮事件 在上图中,我们看到了,有几个判断 ,在C#中,if ,else是作为条件判断 ...
- WinForm皮肤控件(SkinEngine)
WinForm皮肤控件(SkinEngine) 利用 IrisSkin2.dll 所提供的控件 SkinEngine 来为窗体添加皮肤. IrisSkin2.dll 及 皮肤素材,下载地址:http: ...
最新文章
- 大众点评数据平台架构变迁
- python-函数式编程
- Android全局对象Application的使用,以及如何在任何地方得到Application全局对象
- 2019-05-21 Java学习日记之String类型Demo
- Heritrix 3.1.0 源码解析(六)
- Ubuntu C++ Thread Sleep
- 独家揭秘 | 阿里怎么做双11全链路压测?
- 属于程序员的黄金五年,把握这 5 年,或将迎来美好的职场生活!
- 如何系统的自学python-作为小白,如何系统的自学PythonWeb开发?
- office2016风格后台管理系统html模板下载-uimaker设计
- 教你如何用bat程序给电脑清理缓存垃圾(普通版)
- 名片设计尺寸及名片设计的注意事项
- Win10耳机插入电脑无声音问题的解决方案
- 分类--ROC 和曲线下面积
- 壁纸网站研究:强大到没朋友的壁纸网站整理(动漫/二次元/宅男/风景/真人)
- 通过pytorch建立神经网络模型 分析遗传基因数据
- 关于Office 365 显示语言的设置(注册开通时的语言选择及注册开通后的语言显示修改)
- [暑假的bzoj刷水记录]
- Oauth2学习笔记
- How to deal with Imbalanced Datasets in PyTorch - Weighted Random Sampler Tutorial