zoukankan      html  css  js  c++  java
  • 【原创】重绘winform的GroupBox

    功能:重绘winform的GroupBox,以便调整边框颜色和边框宽度
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing.Drawing2D;
    
    namespace JSHYSC_CtrlLib
    {
        public partial class Ctrl_GroupBox : GroupBox
        {
            private Color borderLineColor =System.Drawing.SystemColors.GradientActiveCaption;
            /// <summary>
            /// 边框线颜色
            /// </summary>
            public Color BorderLineColor
            {
                get { return borderLineColor; }
                set { borderLineColor = value; }
            }
    
            private float borderLineWidth = 1;
            /// <summary>
            /// 边框线宽度
            /// </summary>
            public float BorderLineWidth
            {
                get { return borderLineWidth; }
                set { borderLineWidth = value; }
            }
    
            public Ctrl_GroupBox()
            {
                InitializeComponent();
            }
    
            protected override void OnPaint(PaintEventArgs e)
            {
                //base.OnPaint(e);
    
                e.Graphics.Clear(base.BackColor);
    
                //圆弧直径长度
                int radius = 20;
                int width = e.ClipRectangle.Width, height = e.ClipRectangle.Height;
                int titleStartX = 15;
                float titleWidth = e.Graphics.MeasureString(base.Text, base.Font).Width;
                float titleHeight = e.Graphics.MeasureString(base.Text, base.Font).Height;
    
                Pen pen = new Pen(borderLineColor, (float)borderLineWidth);
    
                //左上角圆弧
                e.Graphics.DrawArc(pen, new Rectangle(0, (int)(titleHeight / 2), radius, radius), 180, 90);
    
                //上边框,标题前半部分
                e.Graphics.DrawLine(pen, radius / 2, (titleHeight - 1) / 2, radius + titleStartX-3, (titleHeight - 1) / 2);
    
                //画笔
                SolidBrush brush = new SolidBrush(Color.Black);
                Font font = new System.Drawing.Font("宋体", 10, FontStyle.Bold);
                //标题
                e.Graphics.DrawString(base.Text, font, brush, radius / 2 + titleStartX, 0);
    
                //上边框,标题右半部分
                e.Graphics.DrawLine(pen, radius / 2 + titleStartX + titleWidth+3, (titleHeight - 1) / 2, (width - 1) - radius / 2, (titleHeight - 1) / 2);
    
                //右上角圆弧
                e.Graphics.DrawArc(pen, new Rectangle((width - 1) - radius, (int)(titleHeight / 2), radius, radius), 270, 90);
    
                //右边框
                e.Graphics.DrawLine(pen, width - 1, (int)(titleHeight / 2) + radius / 2, width - 1, (height - 1) - radius / 2);
    
                //右下角圆弧
                e.Graphics.DrawArc(pen, new Rectangle((width - 1) - radius, (height - 1) - radius, radius, radius), 0, 90);
    
                //下边框
                e.Graphics.DrawLine(pen, (width - 1) - radius / 2, height - 1, radius / 2, height - 1);
    
                //左下角圆弧
                e.Graphics.DrawArc(pen, new Rectangle(0, (height - 1) - radius, radius, radius), 90, 90);
    
                //左边框
                e.Graphics.DrawLine(pen, 0, (height - 1) - radius / 2, 0, (int)(titleHeight / 2) + radius / 2);
            }
        }
    }
    
    
    

      

     
  • 相关阅读:
    DNS原理总结及其解析过程详解
    linux修改进程名
    mq_open失败,Invalid argument
    Posix消息队列
    undefined reference to 'mq_open'
    量化投资学习笔记08——统计学基础补漏
    量化投资学习笔记07——python知识补漏
    量化投资学习笔记06——《打开量化投资的黑箱》读书笔记
    量化投资学习笔记05——检验计算回测指标程序
    量化投资学习笔记04——回测实盘策略
  • 原文地址:https://www.cnblogs.com/venux/p/4894447.html
Copyright © 2011-2022 走看看