如何在Winforms应用程序中使标签文本可扩展

时间:2012-12-12 15:24:10

标签: winforms c#-4.0 telerik label system.drawing

我正在寻找一种方法,使标签中的文本能够适合整个父容器。我能想到的一种方法是在窗口上重新调整容器大小,然后相应地增大或减小字体大小,但这会限制其可能性。

想知道是否有更好的方法,这可能更像Winforms应用程序中的锚属性。

2 个答案:

答案 0 :(得分:4)

我知道答案隐藏在图形对象和绘图事件的某处,玩这两个关键字解决了我的问题。这是我的特定情况下的解决方案。

我只是更改标签的paint事件的字体大小,如下所示:

private void myLabel_Paint(object sender, PaintEventArgs e)
{
     float fontSize = NewFontSize(e.Graphics, parentContainer.Bounds.Size, myLabel.Font, myLabel.Text);
     Font f = new Font("Arial", fontSize, FontStyle.Bold);
     myLabel.Font = f;
}

NewFontSize函数的位置如下:

public static float NewFontSize(Graphics graphics, Size size, Font font, string str)
{
    SizeF stringSize = graphics.MeasureString(str, font);
    float wRatio = size.Width / stringSize.Width;
    float hRatio = size.Height / stringSize.Height;
    float ratio = Math.Min(hRatio, wRatio);
    return font.Size * ratio;
}

我也发现这篇文章很有帮助 http://www.switchonthecode.com/tutorials/csharp-tutorial-font-scaling

答案 1 :(得分:1)

这会扩展可接受的答案并为我工作:

首先,我通过在Designer中设置一个正常的Label来确定我的“黄金比例”,该Font的大小在Label.Height属性设置为100的情况下看起来不错。这是我获得48.0F的Font emSize的地方。

然后在OnPaint覆盖中,如果100.0 / 48.0的比例更改,则只需一次调整字体并保存新比例(这样我们就不必制作新字体每次绘制控件时)。

当您将其与常规标签一起放置在工具箱中时,将其放置在工具箱中非常有用。

HorizontalSums_less_p5_pressure