嗨,我正在使用TextRenderer.MeasureText()方法来测量给定字体的文本宽度。我使用Arial Unicode MS字体来测量宽度,这是一种Unicode字体,其中包含所有语言的字符。该方法在不同的服务器上返回不同的宽度。两台计算机都装有Windows 2003,并安装了.net 3.5 SP1。

这是我们使用的代码

using (Graphics g = Graphics.FromImage(new Bitmap(1, 1)))
{
    width = TextRenderer.MeasureText(g, word, textFont, new Size(5, 5), TextFormatFlags.NoPadding).Width;
}

知道为什么会这样吗?

我使用C#2.0

最佳答案

MeasureText不准确。

这是一个更好的方法:

    protected int _MeasureDisplayStringWidth ( Graphics graphics, string text, Font font )
    {
        if ( text == "" )
            return 0;

        StringFormat format = new StringFormat ( StringFormat.GenericDefault );
        RectangleF rect = new RectangleF ( 0, 0, 1000, 1000 );
        CharacterRange[] ranges = { new CharacterRange ( 0, text.Length ) };
        Region[] regions = new Region[1];

        format.SetMeasurableCharacterRanges ( ranges );
        format.FormatFlags = StringFormatFlags.MeasureTrailingSpaces;

        regions = graphics.MeasureCharacterRanges ( text, font, rect, format );
        rect = regions[0].GetBounds ( graphics );

        return (int)( rect.Right );
    }

关于winforms - TextRenderer.MeasureText问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2116216/

10-13 06:49