【发布时间】:2013-11-23 04:07:43
【问题描述】:
我正在尝试编写一种方法来调整文本字体大小,以便文本在控件中正确且完全可见。
我为此尝试的方法如下,
public static void FitControlFont(Control control)
{
if (control.Text.Length == 0)
{
return;
}
Font currentFont = control.Font;
Graphics graphics = control.CreateGraphics();
SizeF newSize = graphics.MeasureString(control.Text, control.Font);
graphics.Dispose();
float factorX = control.Width / newSize.Width;
float factorY = control.Height / newSize.Height;
float factor = factorX > factorY ? factorY : factorX;
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(delegate { control.Font = new Font(currentFont.Name, currentFont.SizeInPoints * factor); }));
}
else
{
control.Font = new Font(currentFont.Name, currentFont.SizeInPoints * factor);
}
}
上述方法效果很好,但是, 我的问题是如何将文本用作多行? 我得到单行文本(因为文本显得非常小)。
我使用标签和按钮作为我在文本更改时需要调整文本字体大小的表单中的控件。
【问题讨论】:
-
如果您的文字不合适,是否要垂直调整大小?
-
我实际上不想调整控件大小,只想调整文本大小以使用完整的控件空间。
-
Graphics.MeasureString 有几个重载,您需要使用带有额外 SizeF(最大尺寸)的重载,并且可能使用与您在 DrawString 调用中使用的匹配的 StringFormat。支持 TextRenderer 而不是 Graphics。
-
@NomeshGajare 您是否尝试将实际多行文本 传递到
MeasureString?只要MeasureString工作正常,这段代码对我来说就可以。