专业编程基础技术教程

网站首页 > 基础教程 正文

C#控件美化之路(6):用GDI+绘制分割线控件

ccvgpt 2024-08-28 13:36:27 基础教程 15 ℃


在软件开发中,控件较多,一般都会碰到若干控件需要分割开来。系统自带的也有一个控件groupbox。后续文章会专门讲解如何美化此空间。今天这篇文章是讲如何用control 绘制一个。

C#控件美化之路(6):用GDI+绘制分割线控件

首先分析结构

1.控件由两条线段+靠左边上的一段文字组成

依据此原理,可以将控件分为三个区域。

如何绘制文字在

C#控件美化之路自己动手绘制用GDI+绘制一个Lable控件(二)

这篇文章中已经详细解释。

本篇文章主要是学习绘制两条直线,还有居中计算。代码比较简单,直接贴完整代码块

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            PaintNotesLine(e);
        }

        //绘制线条和注释文字
        private void PaintNotesLine(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            //Rectangle rec = ClientRectangle;

            float middleY = Height / 2;


            var sizeStr = g.MeasureString(Text, Font);

            var recStr = new RectangleF(10, middleY - sizeStr.Height / 2, sizeStr.Width, sizeStr.Height);

            g.DrawLine(new Pen(new SolidBrush(ForeColor)), 0, middleY, 10 - 1, middleY);
            g.DrawLine(new Pen(new SolidBrush(ForeColor)), recStr.Width + 11, middleY, Width, middleY);

            g.FillRectangle(new SolidBrush(BackColor), recStr);

            //g.DrawString(Text, Font, Brushes.Black, recStr);
            DrawString(Text, g, recStr);
        }

DrawString 是自写方法,在之前的文章中也提到过,本文再贴一次。

        #region 绘制文字
        /// <summary>
        /// 绘制文字上下居中靠左
        /// </summary>
        /// <param name="s"></param>
        /// <param name="g"></param>
        /// <param name="rec"></param>
        public void DrawString(string s, Graphics g, RectangleF rec)
        {
            DrawString(s, g, rec, StringAlignment.Near);
        }
        /// <summary>
        /// 绘制文字上下居中 需要指定水平方向
        /// </summary>
        /// <param name="s"></param>
        /// <param name="g"></param>
        /// <param name="rec"></param>
        /// <param name="stringAlignment"></param>
        public void DrawString(string s, Graphics g, RectangleF rec, StringAlignment stringAlignment)
        {
            g.DrawString(s, this.Font, new SolidBrush(this.ForeColor), rec, new StringFormat(StringFormatFlags.NoClip | StringFormatFlags.NoWrap)
            {
                LineAlignment = StringAlignment.Center,
                Alignment = stringAlignment,
                Trimming = StringTrimming.EllipsisCharacter
            });
        }


        #endregion

关注文林软控,带你一起美化.NET控件。

Tags:

最近发表
标签列表