[转载存档]可以改变文本行距(行间距)的Label

费了一番周折终于解决了,以下若有不当之处敬请各位指教,谢谢!
//////////////////////////////////////////////////////
///
///功能:可以改变文本行距(行间距)的Label
///作者:emanlee
///用于:c#   2003,2005
///时间:2006-8-10
///
/////////////////////////////////////////////////////
using   System;
using   System.ComponentModel;
using   System.Collections.Generic;
using   System.Diagnostics;
using   System.Text;
using   System.Drawing;

namespace   compass.Common
{
        public   partial   class   myLabel   :   System.Windows.Forms.Label
        {
                int   lineDistance   =   5;//行间距

                public   int   LineDistance
                {
                        get   {   return   lineDistance;   }
                        set   {   lineDistance   =   value;   }
                }
                public   myLabel()
                {
                        InitializeComponent();
                }

                public   myLabel(IContainer   container)
                {
                        container.Add(this);

                        InitializeComponent();
                }
                protected   override   void   OnPaint(System.Windows.Forms.PaintEventArgs   e)
                {
                        Graphics   g   =   e.Graphics;
                        String   drawString   =   this.Text;
                        Font   drawFont   =   this.Font;
                        SolidBrush   drawBrush   =   new   SolidBrush(this.ForeColor);
                        SizeF   textSize   =   g.MeasureString(this.Text,   this.Font);//文本的矩形区域大小
                        int   lineCount   =   Convert.ToInt16(textSize.Width   /   this.Width)   +   1;//计算行数

                        this.Height   =   Convert.ToInt16((textSize.Height   +   lineDistance)   *   lineCount);//计算调整后的高度
                        this.AutoSize   =   false;
                        float   x   =   0.0F;
                        float   y   =   0.0F;
                        StringFormat   drawFormat   =   new   StringFormat();
                        int   step   =   1;
                        lineCount   =   drawString.Length;//行数不超过总字符数目
                        for   (int   i   =   0;   i   <   lineCount;   i++)
                        {
                                //计算每行容纳的字符数目
                                int   charCount;
                                for   (charCount   =   0;   charCount   <   drawString.Length;   charCount++)
                                {
                                        string   subN   =   drawString.Substring(0,   charCount);
                                        string   subN1   =   drawString.Substring(0,   charCount   +   1);
                                        if   (g.MeasureString(subN,   this.Font).Width   <=   this.Width
                                                &&   g.MeasureString(subN1,   this.Font).Width   >   this.Width)
                                        {
                                                step   =   charCount;
                                                break;
                                        }
                                }
                                string   subStr;
                                if   (charCount   ==   drawString.Length)//最后一行文本
                                {
                                        subStr   =   drawString;
                                        e.Graphics.DrawString(subStr,   drawFont,   drawBrush,   x,   Convert.ToInt16(textSize.Height   *   i)   +   i   *   LineDistance,   drawFormat);
                                        break;
                                }
                                else
                                {
                                        subStr   =   drawString.Substring(0,   step);//当前行文本
                                        drawString   =   drawString.Substring(step);//剩余文本
                                        e.Graphics.DrawString(subStr,   drawFont,   drawBrush,   x,   Convert.ToInt16(textSize.Height   *   i)   +   i   *   LineDistance,   drawFormat);
                                }
                        }
                }
        }

原文地址:https://www.cnblogs.com/jizonghai/p/2605090.html