1

我正在尝试绘制多色字符串。

由于没有执行此操作的默认方法,因此我尝试使用 TextRenderer.DrawText 自己绘制字符串 char,但是,当我尝试测量字符串时,它不会正确报告第一个字符的宽度。

为了逐个字符地绘制它,我遍历测量前一个字符宽度的字符串以找到下一个要绘制的字符的位置。

为了获得宽度,我使用:

       TextRenderer.MeasureText(word.Substring(0, i),
                    drawFont,
                    new Size(int.MaxValue, int.MaxValue),
                    (TextFormatFlags.Left | TextFormatFlags.NoPadding)).Width

哪个正常工作,但对于第一个字符,它会生成如下输出:

      L OREMIPSUM

基本上,如果只有一个字符 - 尽管我的标志,它会用填充来测量它。

我可以用:

      TextRenderer.MeasureText(String.Concat("*", chr.ToString(), "*"), font).Width - TextRenderer.MeasureText("**", font).Width

测量第一个字符并获得正确的宽度值,但是当应该有更好的方法可用时,感觉就像我在做一些黑客行为。

我也可以在上面的方法中使用字符串来避免使用 TextRenderer.MeasureText 并且在没有第一个字符问题的情况下仍然可以获得正确的结果。

在我的情况下,测量字符的正确方法是什么?

4

1 回答 1

1

您应该使用图形对象中的MeasureString。还要看看TextRenderer.MeasureText 和 Graphics.MeasureString mismatch in size。它将解释差异。

于 2016-12-21T05:47:45.280 回答