C#Winform拓展控件之Panel

     本文在继承自带的Panel的基础上,进行了一点拓展,实现了panel背景的渐变填充以及边框的圆角设置。

效果如下:

C#Winform拓展控件之Panel_第1张图片

属性栏:

C#Winform拓展控件之Panel_第2张图片

实现原理也很简单:

   在onpaint事件内进行重绘,首先进行渐变的填充,用LinearGradientBrush 渐变颜色的笔刷,填充整个空间,再绘制出圆角区域就行了。

代码附上:

    /// 
    /// 渐变背景颜色panel
    /// 
    [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 构造函数 

        /// 
        /// 渐变填充 边框设置的panel
        /// 
        public yPanelGradual()
        {
            InitializeComponent(); 
        }

        #endregion

        #region 自定属性

        /// 
        /// 渐变填充起始颜色
        /// 
        [Category("1、自定属性"), Description("渐变填充起始颜色")]
        public Color StartColor
        {
            get
            {
                return startColor;
            } 
            set
            {
                startColor = value;
                this.Invalidate();
            }
        }
        /// 
        /// 渐变填充结束颜色
        /// 
        [Category("1、自定属性"), Description("渐变填充结束颜色")]
        public Color EndColor
        {
            get
            {
                return endColor;
            } 
            set
            {
                endColor = value;
                this.Invalidate();
            }
        }
        /// 
        /// 渐变填充角度
        /// 
        [Category("1、自定属性"), Description("渐变填充角度")]
        public float Angle
        {
            get
            {
                return angle;
            } 
            set
            {
                angle = value;
                this.Invalidate();
            }
        }
        /// 
        /// 隐藏之前的BackColor
        /// 
        [Browsable(false)]
        public override Color BackColor
        {
            get
            {
                return base.BackColor;
            } 
            set
            {
                base.BackColor = value;
            }
        }

        /// 
        /// 边框颜色
        /// 
        [Category("1、自定属性"), Description("边框颜色")]
        public Color BorderColor
        {
            get
            {
                return borderColor;
            } 
            set
            {
                borderColor = value;
                this.Invalidate();
            }
        }
        /// 
        /// 边框粗细(1-3)
        /// 
        [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();
            }
        }

        /// 
        /// 圆角弧度 1-90 ; 控制着控件的最小大小
        /// 
        [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();
            }
        }

        /// 
        /// 内部字体
        /// 
        [Category("1、自定属性"), Description("内部字体")]
        public override Font Font
        {
            get
            {
                return base.Font;
            } 
            set
            {
                base.Font = value;
            }
        }
        /// 
        /// 内部字体颜色
        /// 
        [Category("1、自定属性"), Description("内部字体颜色")]
        public override Color ForeColor
        {
            get
            {
                return base.ForeColor;
            }

            set
            {
                base.ForeColor = value;
            }
        }

        #endregion

        #region 事件重写

        /// 
        /// 
        /// 
        /// 
        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); 
            }
        }

        /// 
        /// 获取带圆角的边框
        /// 
        /// 
        /// 
        /// 
        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)