日期:2014-05-17  浏览次数:21348 次

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的源代码,它的自动换行就是循环算出每一行文本的溢出,然后再算下一行。你在你的程序中仿照这个过程就能算出多行文本的范围了。
------解决方案--------------------