本文在继承自带的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相关推荐

  1. winformbutton边框怎么改_C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法

    C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法 1.新建组件这里可以自定义一个Panel控件起名为PanelEx 2.增加一个BoderColor属性和BoderSize属性 pr ...

  2. WinForm的控件

    WinForm的控件: -------------------- WinForm的控件: ---------------------      不同的控件类型:           --------- ...

  3. DevExpress Winform 常用控件

    前言 DevExpress 控件的功能比较强大,是全球知名控件开发公司,对于开发 B/S 或 C/S 都非常出色,可以实现很炫且功能强大的效果. DevExpress Winform 常用控件是本人在 ...

  4. Winform分页控件之纯分页显示处理

    在之前介绍的Winform分页控件中,都以分页控件+显示表格控件作为一个整体性的控件,不可分开,这样做的目的是可以实现更多的操作,集成更多丰富的特性,减少我们开发的工作量,这种情况虽然适用于大多数的情 ...

  5. VB调用C#写的WinForm.NET控件

    点击下载本文配套的演示程序代码http://files.cnblogs.com/xdesigner/VB-CS-WinformControl.zip. 一.前言: 虽然IT开发技术日新月异,不过业界仍 ...

  6. winform/timer控件/权限设置/三级联动

    winform/timer控件/权限设置/三级联动 一.timer控件 组件--timer timer是一个线程,默认可以跨线程访问对象 属性:Enabled--可用性 Interval--间隔时间 ...

  7. winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法。

    winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法. 参考文章: (1)winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解 ...

  8. 如何在多线程中调用winform窗体控件2——实例篇

    如何在多线程中调用winform窗体控件2--实例篇 针对之前文章<如何在多线程中调用winform窗体控件>,下面举个我项目中的实际案例,这是一个我自定义控件在异步设置焦点时的代码.在新 ...

  9. winform 判断控件有没有被遮挡_编程入门基础之 winform(2)

    在编程入门1中,我们通过WINFORM等控件画出了登录界面,我们今天写登录界面的登录按钮事件. 装修预算小程序登录按钮事件 在上图中,我们看到了,有几个判断 ,在C#中,if ,else是作为条件判断 ...

  10. WinForm皮肤控件(SkinEngine)

    WinForm皮肤控件(SkinEngine) 利用 IrisSkin2.dll 所提供的控件 SkinEngine 来为窗体添加皮肤. IrisSkin2.dll 及 皮肤素材,下载地址:http: ...

最新文章

  1. 大众点评数据平台架构变迁
  2. python-函数式编程
  3. Android全局对象Application的使用,以及如何在任何地方得到Application全局对象
  4. 2019-05-21 Java学习日记之String类型Demo
  5. Heritrix 3.1.0 源码解析(六)
  6. Ubuntu C++ Thread Sleep
  7. 独家揭秘 | 阿里怎么做双11全链路压测?
  8. 属于程序员的黄金五年,把握这 5 年,或将迎来美好的职场生活!
  9. 如何系统的自学python-作为小白,如何系统的自学PythonWeb开发?
  10. office2016风格后台管理系统html模板下载-uimaker设计
  11. 教你如何用bat程序给电脑清理缓存垃圾(普通版)
  12. 名片设计尺寸及名片设计的注意事项
  13. Win10耳机插入电脑无声音问题的解决方案
  14. 分类--ROC 和曲线下面积
  15. 壁纸网站研究:强大到没朋友的壁纸网站整理(动漫/二次元/宅男/风景/真人)
  16. 通过pytorch建立神经网络模型 分析遗传基因数据
  17. 关于Office 365 显示语言的设置(注册开通时的语言选择及注册开通后的语言显示修改)
  18. [暑假的bzoj刷水记录]
  19. Oauth2学习笔记
  20. How to deal with Imbalanced Datasets in PyTorch - Weighted Random Sampler Tutorial

热门文章

  1. 嵌入式课程 之 霍尔传感器(编码器)实验
  2. C# 汉字转拼音(支持GB2312字符集中所有汉字)
  3. Dynamic Web TWAIN:网页扫描过程中如何自动检测和删除空白页?
  4. 前端/后端、前台/后台的英文翻译选择
  5. 利用spring AOP 实现 sql注入检测
  6. 【华谋咨询】企业5s管理做大做强的四大措施
  7. 土建中级工程师考试用书电子版_建筑工程中级职称考试试卷教学教材
  8. EditText属性大全详解
  9. Ajax 原生js写法
  10. word域代码中添加空格_如何在Word 2013中自动添加两个空格