zoukankan      html  css  js  c++  java
  • 可以改变文本行距(行间距)的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);
                    }
                }
            }
        }
    }
    
  • 相关阅读:
    Hash详解
    手写2048
    20180429模拟赛T1——添边问题
    题解:UVA1025 A Spy in the Metro
    20180418模拟赛T2——Gym
    20180418模拟赛T1——Seq
    学习:中国剩余定理
    20180414模拟赛T2——拼图
    20180414模拟赛T1——BEAD
    学习:树状数组
  • 原文地址:https://www.cnblogs.com/simadi/p/3449296.html
Copyright © 2011-2022 走看看