winform中label換行后行距的設置


某種情況下,

需要使用label在界面中添加說明性的文本,

文本長度往往比較長,

需要換行,

雖然在字符中加入\r\n后可以實現換行,

但默認的行距很小,

文本擠在一起,

看起來比較費眼,

所以想着調整一下行距,

經過搜索,

這里找到了相關的方法。

 

我自己試着改了一下,

直接在label的paint方法中實現了,

沒有定義自己的控件。

代碼如下:

private void label8_Paint(object sender, PaintEventArgs e)
{
    System.Windows.Forms.Label label = sender as System.Windows.Forms.Label;
    int LineDistance = 4;//行間距
    Graphics g = e.Graphics;
    g.Clear(label.BackColor);
    String drawString = label.Text;
    System.Drawing.Font drawFont = label.Font;
    SolidBrush drawBrush = new SolidBrush(label.ForeColor);
    //文本的矩形區域大小
    SizeF textSize = g.MeasureString(label.Text, label.Font);
    //計算行數
    int lineCount = Convert.ToInt16(textSize.Width / label.Width) + 1;
    //計算調整后的高度
    label.Height = Convert.ToInt16((textSize.Height + LineDistance) * lineCount);
    label.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, label.Font).Width <= label.Width
                && g.MeasureString(subN1, label.Font).Width > label.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);
        }
    }
}

 

 

雖然還有些不足,

比如逗號在行首,

但整體效果比之前要好不少了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM