自动调整固定大小标签中的文本大小,以避免文本跳转到第二行
本文关键字:文本 二行 调整 标签 | 更新日期: 2023-09-27 18:09:51
我有一个固定大小的标签,大约100像素宽,20像素高。
当我在标签中放入一个长字符串时,文本会自动换行到第二行,但是我看不到第二行,因为标签的大小是固定的。
我不希望换行到第二行,而是希望缩小字体大小,以便字符串显示在标签中的单行上。有人知道一个简单的方法吗?
编辑:下面的代码是为我工作(大多数时间)。我不想做任何递归。有时,文本仍然溢出到另一行。我想是因为我不能真正使用标签的整个宽度。我该如何弥补呢?
private void Label_TextChanged(object sender, EventArgs e)
{
Label label = sender as Label;
if (label != null && label.Text.Length != 0)
{
SizeF size = new SizeF();
using (Graphics g = label.CreateGraphics())
{
size = g.MeasureString(label.Text, label.Font);
}
Single x = (label.Width) / size.Width;
Single y = (label.Height) / size.Height;
Single scaler = x > y ? y : x;
using (Font font = label.Font)
{
label.Font = new Font(font.Name, font.SizeInPoints * scaler);
}
}
}
这很容易做到。使用Graphics.MeasureString(…)来确定字符串所需的宽度,然后逐渐使字体越来越小,直到字符串所需的宽度等于或小于标签的宽度。
您可以使用System.Windows.Forms.Label.TextChanged
-event检查字符串的长度
private void Label_TextChanged(object sender, EventArgs e){
System.Windows.Forms.Label label = sender as label;
if(label != null){
//check text-length and if necessary resize it
}
}
查看TextChanged
-event。
有FontHeight
-属性,它可能会满足您的要求。参考:
如果一切都失败了,从System.Windows.Forms.Label
派生并创建自己的自定义标签。