winform Label控件字体能否自动调整?
请问哥哥姐姐们,Label控件能不能在控件大小一定的情况下,根据要显示的字数多少来自动调整字体大小,防止文本显示不全?查了一会儿没找到。先谢谢大家了! winform
[解决办法]
滚动条!!!!
[解决办法]
需要你编程序处理
[解决办法]
要么就用Enable为False的TextBox伪装一个。。。。
[解决办法]
或者什么时候字数变了一起修改Font
private void button1_Click(object sender, EventArgs e)
{
if (this.label1.Text == "xxx")
{
this.label1.Text = "xxxx";
this.label1.Font = new Font("SimSun", 20);
}
else
{
this.label1.Text = "xxx";
this.label1.Font = new Font("SimSun", 30);
}
}
[解决办法]
继承一个自己的Label,屏蔽Font属性,在Text属性中调用Graphics.MeasureString测量文本是否超长,并且调整字体。
[解决办法]
System.Windows.Forms.TextRenderer类提供了测量和呈现文本的方法,你参考一下
[解决办法]
没有这种属性,你可以编写一个方法来实现这个功能
参考代码:
private float chang_text_size(string s, int width,int height)
{
float size=0f;
size = (float)((width * 1.2) / s.Length);//1.2是我自己测算出来的
if (size > height - 3) //3也是自己测算出来的
{
size = height - 3;
}
return size;
}
字体大小改变代码:
this.label1.Font = new System.Drawing.Font("宋体", chang_text_size(textBox1.Text, label1.Width, label1.Height), System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));测试可以实现你要求的功能
[解决办法]
如果你很较真的话,你可以反编译Label的源代码,它的自动换行就是循环算出每一行文本的溢出,然后再算下一行。你在你的程序中仿照这个过程就能算出多行文本的范围了。
------解决方案--------------------
我认为需要考虑一种情况:如果label中的内容足够多,里面的字体是不是小得让人看不见了?
建议用一个带滚动条的TextBox来实现;