寻找一种根据Labels
的大小变化来调整Label
文本大小的方法。 (即,如果标签的大小增加50%
,则文本也应增加大约50%
的大小。)
有很多文章围绕它们调整文本以完全适合Label
的大小,这不适合我想要的内容。
我已经有这个版本了。
以某种方式,一旦调整大小后,我需要能够引用Label
的先前大小,以便确定用于调整文本大小的比例。
答案 0 :(得分:0)
也许您唯一可以做的就是获取包含内容的标签的实际大小,然后使用一个因子来获取新的大小。
您可以使用来获取标签的渲染尺寸;
System.Drawing.Size TextRenderer.MeasureText (string text, System.Drawing.Font font);
获得标签的渲染尺寸后,可以通过将返回的尺寸乘以一个因子(例如:Size * 0.5)来重新设置label.width和label.height,这将为您提供所需尺寸的一半。 / p>
您可以在Label的SizeChanged事件处理程序中使用相同的方法来确定MeasuredSize;
希望我能给您一些有关如何实现这一目标的见识。
答案 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);
}
视觉效果: