根据标签大小缩放标签文本

时间:2018-10-25 10:33:52

标签: c# winforms graphics

寻找一种根据Labels的大小变化来调整Label文本大小的方法。 (即,如果标签的大小增加50%,则文本也应增加大约50%的大小。)

有很多文章围绕它们调整文本以完全适合Label的大小,这不适合我想要的内容。
我已经有这个版本了。

以某种方式,一旦调整大小后,我需要能够引用Label的先前大小,以便确定用于调整文本大小的比例。

2 个答案:

答案 0 :(得分:0)

也许您唯一可以做的就是获取包含内容的标签的实际大小,然后使用一个因子来获取新的大小。

您可以使用来获取标签的渲染尺寸;

System.Drawing.Size TextRenderer.MeasureText (string text, System.Drawing.Font font);

获得标签的渲染尺寸后,可以通过将返回的尺寸乘以一个因子(例如:Size * 0.5)来重新设置label.width和label.height,这将为您提供所需尺寸的一半。 / p>

您可以在Label的SizeChanged事件处理程序中使用相同的方法来确定MeasuredSize;

  • 小于当前标签大小:增加字体大小,直到达到〜= labelsize
  • 大于当前标签大小:减小字体大小,直到〜= labelsize或
  • 等于当前标签大小:什么都不做?

希望我能给您一些有关如何实现这一目标的见识。

答案 1 :(得分:0)

使用Graphics.ScaleTransform()的示例,用于在后面的图形操作之前添加转换矩阵。

请注意,只要图形可以绘制给定大小的字体,此转换就适用。如果字体太小或太大,则渲染将无法正常工作。
最小字体大小应为8.5 ~ 9点,并且不得超过72
在此范围之外,结果是不可预测的。 (例如,文本可能会消失)。
因此,控件的最小/最大大小应在设计时设置,并且不能超出这些度量范围。

此处的Label.TextAlign属性设置为ContentAlignment.MiddleLeft
另外:.AutoSize = false; .Text = "Some text that needs to fit";

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;

private void label1_Paint(object sender, PaintEventArgs e)
{
    Label label = sender as Label;
    e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
    float TextWidth = e.Graphics.MeasureString(label.Text, label.Font, label.Size, StringFormat.GenericTypographic).Width;
    float scale = (label.ClientSize.Width - label.Padding.Left) / TextWidth;
    e.Graphics.Clear(label.BackColor);
    e.Graphics.ScaleTransform(scale, scale);

    using (SolidBrush brush = new SolidBrush(label.ForeColor))
        e.Graphics.DrawString(label.Text, label.Font, brush,  
                              new RectangleF(PointF.Empty, label1.ClientSize), 
                              StringFormat.GenericTypographic);
}

视觉效果:

Text ScaleTransform