zoukankan      html  css  js  c++  java
  • winform中label换行后行距的设置

    某种情况下,

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

    文本长度往往比较长,

    需要换行,

    虽然在字符中加入 后可以实现换行,

    但默认的行距很小,

    文本挤在一起,

    看起来比较费眼,

    所以想着调整一下行距,

    经过搜索,

    这里找到了相关的方法。

    我自己试着改了一下,

    直接在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);
            }
        }
    }
    

    虽然还有些不足,

    比如逗号在行首,

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

  • 相关阅读:
    js多图上传展示和删除
    简单的下拉加载和上拉加载
    js实现放大镜效果
    js表格拖拽
    js表格上下移动添加删除
    js写的滑动解锁
    关于serialize() FormData serializeArray()表单序列化
    js日历
    js树状菜单
    Restful API官方文档
  • 原文地址:https://www.cnblogs.com/myzw/p/14084150.html
Copyright © 2011-2022 走看看