我正在创建一个包含大量tableLayoutPanel,标签和按钮的Windows窗体应用程序。在启动时以及调整表单大小时,我希望组件中的文本大小能够最好地适应组件,而不会削减单词的结尾。
如果有人可以帮助我们执行此操作的代码段,那么这对我有帮助!
提前致谢。
答案 0 :(得分:2)
正如@Rakitić所说,你需要确保一切都是左,上,下,右锚定。
作为说明,我使用了一个大小的多行文本框来填充整个表单。然后我将以下代码放在SizeChanged事件中:
private void textBox1_SizeChanged(object sender, EventArgs e)
{
TextBox tb = sender as TextBox;
if (tb.Height < 10) return;
if (tb == null) return;
if (tb.Text == "") return;
SizeF stringSize;
// create a graphics object for this form
using (Graphics gfx = this.CreateGraphics())
{
// Get the size given the string and the font
stringSize = gfx.MeasureString(tb.Text, tb.Font);
//test how many rows
int rows = (int)((double)tb.Height / (stringSize.Height));
if (rows == 0)
return;
double areaAvailable = rows * stringSize.Height * tb.Width;
double areaRequired = stringSize.Width * stringSize.Height * 1.1;
if (areaAvailable / areaRequired > 1.3)
{
while (areaAvailable / areaRequired > 1.3)
{
tb.Font = new Font(tb.Font.FontFamily, tb.Font.Size * 1.1F);
stringSize = gfx.MeasureString(tb.Text, tb.Font);
areaRequired = stringSize.Width * stringSize.Height * 1.1;
}
}
else
{
while (areaRequired * 1.3 > areaAvailable)
{
tb.Font = new Font(tb.Font.FontFamily, tb.Font.Size / 1.1F);
stringSize = gfx.MeasureString(tb.Text, tb.Font);
areaRequired = stringSize.Width * stringSize.Height * 1.1;
}
}
}
}
在表单上有很多对象的情况下,我只选择一个,并使用它来设置与上面类似的自己的字体大小,然后对表单上的所有对象重复此字体大小。只要您允许合适的“误差范围”(处理自动换行等,上述技术应该可以帮助您。
此外,我强烈建议您在Form SizeChanged事件中为表单设置最小宽度和高度,否则可能会发生愚蠢的事情!