日期:2014-05-20  浏览次数:20953 次

怎么实现文本宽度自适应?
用Graphics.DrawString 方法画单行文本:
有多个固定大小的Rectangle,想在里面画上不同的文本,字体已知,但是,当使用已知字体drawString时,如果rectangle的宽度不足以显示完文本时,将自动缩小字体,或者把文字的宽度变得窄一些,以显示完文本。请问该怎么办呢?
由于需要显示文本的Rectangle比较多,所以要考虑解决方法的性能,多谢!

------解决方案--------------------
计算字符和长度,根据长度设置字体大小。通过传递长度和字体到方法实现。
------解决方案--------------------
计算字符大小有什么好方法吗?
------解决方案--------------------
你有Graphics了 你用_Graphics.MeasureString 获取下判断下就不行了
------解决方案--------------------
http://topic.csdn.net/u/20081209/12/31eda7a5-378e-4b9b-9c60-9b62250f3814.html
------解决方案--------------------
C# code

private FontUnit MN_GetFontSize(string P_String)
        {
            Size size_2;
            Bitmap _bitmap = new Bitmap(Convert.ToInt32(this.Width.Value), Convert.ToInt32(this.Height.Value));
            Graphics _graphics = Graphics.FromImage(_bitmap);
            float fontsize = 0.1f;
            SizeF _sizef = new SizeF();
            do
            {
                Font font_1 = new Font("Arial", fontsize);
                _sizef = _graphics.MeasureString(P_String, font_1);
                fontsize += 0.1f;
                Size size_1 = _sizef.ToSize();
                if (size_1.Height > Convert.ToInt32(this.Height.Value))
                {
                    break;
                }
                size_2 = _sizef.ToSize();
            }
            while (size_2.Width <= Convert.ToInt32(this.Width.Value));
            return new FontUnit(Convert.ToInt32((double) (fontsize - 0.1)));
        }

------解决方案--------------------
不会,帮顶!
------解决方案--------------------
先按某个固定大小的画,然后保存成图片形式,再加载进来。
------解决方案--------------------
Graphics.MeasureString
------解决方案--------------------
学习。
------解决方案--------------------
C# code
/// <summary>
/// 获取字体
/// </summary>
/// <param name="s">字符串容器Size</param>
/// <param name="P_String">字符串内容</param>
/// <param name="sFontName">字体名称</param>
/// <returns></returns>
private Font GetFont(Size s ,string P_String,string sFontName)
{
    Bitmap _bitmap = new Bitmap(s.Width, s.Height);
    Graphics _graphics = Graphics.FromImage(_bitmap);
    float fontsize = 0.1f;
    for(Size _size = new Size();_size.Width<s.Width && _size.Height <s.Height;fontsize += 0.1f)
    {
        Font font_1 = new Font(sFontName, fontsize);
        _size = _graphics.MeasureString(P_String, font_1).ToSize();    
    }
    return new Font(sFontName,fontsize - 0.2f);
}

private void Form1_Load(object sender, System.EventArgs e)
{
    label1.Text = "测试字符...";
    label1.Font = GetFont(label1.Size,label1.Text,"宋体");
}

------解决方案--------------------
学习
------解决方案--------------------
ding
------解决方案--------------------
xuexi!
------解决方案--------------------
09年第一帖就不会
郁闷!
帮顶
------解决方案--------------------
09年第一帖就不会 
郁闷!
------解决方案--------------------