自动调整固定大小标签中的文本,以避免文本跳转到第二行

时间:2013-04-17 11:29:49

标签: c# string winforms label autosize

我的标签尺寸固定,大约100像素宽,20像素高。

当我在标签中放置一个长字符串时,文本换行到第二行但我看不到第二行,因为标签的大小是固定的。

我希望fontize缩小,而不是换行到第二行,以便字符串显示在标签的一行上。有谁知道一个简单的方法吗?

修改

以下代码对我有用(大部分时间)。我不想做任何递归的事情。有时候文本仍会溢出到另一行。我假设因为我无法真正使用标签的整个宽度。我该如何弥补?

private void Label_TextChanged(object sender, EventArgs e)
{
    Label label = sender as Label;

    if (label != null && label.Text.Length != 0)
    {
        SizeF size = new SizeF();
        using (Graphics g = label.CreateGraphics())
        {
            size = g.MeasureString(label.Text, label.Font);
        }

        Single x = (label.Width) / size.Width;
        Single y = (label.Height) / size.Height;
        Single scaler = x > y ? y : x;

        using (Font font = label.Font)
        {
            label.Font = new Font(font.Name, font.SizeInPoints * scaler);
        }
    }
}

2 个答案:

答案 0 :(得分:3)

这很容易做到。使用Graphics.MeasureString(...)确定字符串所需的宽度,然后逐渐使字体越来越小,直到字符串所需的宽度等于或小于标签的宽度。

答案 1 :(得分:0)

您可以使用System.Windows.Forms.Label.TextChanged - 事件并检查字符串的长度。

private void Label_TextChanged(object sender, EventArgs e){
    System.Windows.Forms.Label label = sender as label;
    if(label != null){
       //check text-length and if necessary resize it
    } 
}

请参阅here了解TextChanged - 事件。​​

FontHeight - 属性,可能会有你的伎俩。请参阅here以获取参考。

如果一切都失败了,请从System.Windows.Forms.Label派生并创建自己的自定义标签。