代码从网上搜集

#region 圆角矩形
        /// 
        /// 最大圆角半径
        /// 
        protected const int MaxRoundRadius = 3;
        /// 
        /// 最小矩形边长,用于自动处理圆角大小
        /// 
        protected const int MinBorderLength = 20;
        /// 
        /// 绘制一个圆角矩形.
        /// 
        /// 当前屏幕的图形对象
        /// 矩形线条的颜色
        /// 矩形左上角X坐标
        /// 矩形左上角Y坐标
        /// 矩形右下角X坐标
        /// 矩形右下角Y坐标
        /// 圆角的半径长度
        public static void DrawRoundRect(System.Drawing.Graphics currentGraphicObject, Color lineColor, int nLeft, int nTop, int nRight, int nBottom, int round)
        {
            if (round > MaxRoundRadius)
            {
                round = MaxRoundRadius;
            }
            else if (round < 0)
            {
                round = 0;
            }
            if (Math.Abs(nRight - nLeft) < MinBorderLength && Math.Abs(nBottom - nTop) < MinBorderLength)
            {
                round = 1;
            }

            Point Polygon1 = new Point(nLeft + round, nTop);
            Point Polygon2 = new Point(nRight - round + 1, nTop);

            Point Polygon3 = new Point(nLeft, nTop + round);
            Point Polygon4 = new Point(nRight + 1, nTop + round);

            Point Polygon5 = new Point(nLeft, nBottom - round);
            Point Polygon6 = new Point(nRight + 1, nBottom - round);

            Point Polygon7 = new Point(nLeft + round, nBottom + 1);
            Point Polygon8 = new Point(nRight - round, nBottom + 1);

            //四条主线(上下左右)
            currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor), Polygon1.X, Polygon1.Y, Polygon2.X, Polygon2.Y);
            currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor), Polygon7.X, Polygon7.Y, Polygon8.X, Polygon8.Y);
            currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor), Polygon3.X, Polygon3.Y, Polygon5.X, Polygon5.Y);
            currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor), Polygon4.X, Polygon4.Y, Polygon6.X, Polygon6.Y);

            //四个边角
            currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor), Polygon1.X, Polygon1.Y, Polygon3.X, Polygon3.Y);
            currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor), Polygon2.X, Polygon2.Y, Polygon4.X, Polygon4.Y);
            currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor), Polygon5.X, Polygon5.Y, Polygon7.X, Polygon7.Y);
            currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor), Polygon6.X, Polygon6.Y, Polygon8.X, Polygon8.Y);
        }
        /// 
        /// 绘制一个圆角矩形.
        /// 
        /// 当前屏幕的图形对象
        /// 矩形线条的颜色
        /// 要绘制的矩形对象
        /// 圆角的半径长度
        public static void DrawRoundRect(System.Drawing.Graphics currentGraphicObject, Color lineColor, Rectangle rect, int round)
        {
            DrawRoundRect(currentGraphicObject, lineColor, rect.Left, rect.Top, rect.Right, rect.Bottom, round);
        }
        /// 
        /// 绘制一个圆角矩形.
        /// 
        /// 当前屏幕的图形对象
        /// 矩形线条的颜色
        /// 要绘制的矩形对象
        public static void DrawRoundRect(System.Drawing.Graphics currentGraphicObject, Color lineColor, Rectangle rect)
        {
            DrawRoundRect(currentGraphicObject, lineColor, rect.Left, rect.Top, rect.Right, rect.Bottom, 2);
        }

        /// 
        /// 填充一个圆角矩形.
        /// 
        /// 当前屏幕的图形对象
        /// 矩形线条的颜色
        /// 矩形左上角X坐标
        /// 矩形左上角Y坐标
        /// 矩形右下角X坐标
        /// 矩形右下角Y坐标
        /// 圆角的半径长度
        public static void FillRoundRect(System.Drawing.Graphics currentGraphicObject, Color fillColor, int nLeft, int nTop, int nRight, int nBottom, int round)
        {
            if (round > MaxRoundRadius)
            {
                round = MaxRoundRadius;
            }
            else if (round < 0)
            {
                round = 0;
            }
            if (Math.Abs(nRight - nLeft) < MinBorderLength && Math.Abs(nBottom - nTop) < MinBorderLength)
            {
                round = 1;
            }

            Point Polygon1 = new Point(nLeft + round, nTop);
            Point Polygon2 = new Point(nRight - round + 1, nTop);

            Point Polygon3 = new Point(nLeft, nTop + round);
            Point Polygon4 = new Point(nRight + 1, nTop + round);

            Point Polygon5 = new Point(nLeft, nBottom - round);
            Point Polygon6 = new Point(nRight + 1, nBottom - round);

            Point Polygon7 = new Point(nLeft + round, nBottom + 1);
            Point Polygon8 = new Point(nRight - round, nBottom + 1);

            currentGraphicObject.FillPolygon(new System.Drawing.SolidBrush(fillColor), new Point[]{   Polygon1,
                      Polygon3,
                      Polygon5,
                      Polygon7,
                      Polygon8,
                      Polygon6,
                      Polygon4,
                      Polygon2});
        }
        /// 
        /// 填充一个圆角矩形.
        /// 
        /// 当前屏幕的图形对象
        /// 矩形线条的颜色
        /// 要填充的矩形
        /// 填充区域针对矩形的缩进距离
        /// 圆角的半径长度
        public static void FillRoundRect(System.Drawing.Graphics currentGraphicObject, Color lineColor, Rectangle rect, int indentSize, int round)
        {
            FillRoundRect(currentGraphicObject, lineColor, rect.Left + indentSize, rect.Top + indentSize, rect.Right - indentSize + 1, rect.Bottom - indentSize + 1, round);
        }
        /// 
        /// 填充一个圆角矩形.
        /// 
        /// 当前屏幕的图形对象
        /// 矩形线条的颜色
        /// 要填充的矩形
        public static void FillRoundRect(System.Drawing.Graphics currentGraphicObject, Color lineColor, Rectangle rect)
        {
            FillRoundRect(currentGraphicObject, lineColor, rect, 0, 2);
        }

        public static void FillRoundTitle(System.Drawing.Graphics currentGraphicObject, Color fillColor, int nLeft, int nTop, int nRight, int nBottom, int round,int Height)
        {
            if (round > MaxRoundRadius)
            {
                round = MaxRoundRadius;
            }
            else if (round < 0)
            {
                round = 0;
            }
            if (Math.Abs(nRight - nLeft) < MinBorderLength && Math.Abs(nBottom - nTop) < MinBorderLength)
            {
                round = 1;
            }

            Point Polygon1 = new Point(nLeft + round, nTop);
            Point Polygon2 = new Point(nRight - round + 1, nTop);

            Point Polygon3 = new Point(nLeft, nTop + round);
            Point Polygon4 = new Point(nRight + 1, nTop + round);

            Point Polygon5 = new Point(nLeft, nTop + Height);
            Point Polygon6 = new Point(nRight + 1, nTop + Height);

            currentGraphicObject.FillPolygon(new System.Drawing.SolidBrush(fillColor), new Point[]{   Polygon1,
                      Polygon3,
                      Polygon5,
                      Polygon6,
                      Polygon4,
                      Polygon2});
        }

        public static void FillRoundTitle(System.Drawing.Graphics currentGraphicObject, Color lineColor, Rectangle rect, int indentSize, int round, int Height)
        {
            FillRoundTitle(currentGraphicObject, lineColor, rect.Left + indentSize, rect.Top + indentSize, rect.Right - indentSize + 1, rect.Bottom - indentSize + 1, round, Height);
        }

        #endregion