4

鉴于我已经知道宽度,我需要计算字符串的高度。

例如,如果有一个字符串,如“Curabitur semper ipsum semper nulla dictum, vel vulputate elit fringilla. Donec nec placerat purus, ut blandit lectus. Maecenas non molestie nulla. Class aptent taciti socialsqu。”

我可以使用以下代码来计算该字符串的单行宽度/高度。

using (Graphics gfx = Graphics.FromImage(new Bitmap(1, 1)))
{
    System.Drawing.Font f = new System.Drawing.Font(
        FontFamily.GenericSansSerif, 10, FontStyle.Regular);
    SizeF bounds = gfx.MeasureString(
        message, f, new PointF(0, 0), 
        new StringFormat(StringFormatFlags.MeasureTrailingSpaces));
}

但是,我想做的是计算该字符串的高度,如果它在 200px 的 div 内,考虑换行。

起初我认为它是用于派生 Graphics 对象的图像宽度的函数。

using (Graphics gfx = Graphics.FromImage(new Bitmap(500, 200)))

这没有帮助并获得相同的单线尺寸。

有谁知道任何其他技巧来获得这个?

4

2 回答 2

3

鉴于我已经知道宽度

然后你当然必须告诉 MeasureString() 那个宽度,注意你从来没有在你的代码中这样做过。MeasureString() 有几个重载,您需要使用一个采用 SizeF 的重载。通过,说,new SizeF(500, int.MaxValue)。您将返回的 SizeF 仍将具有 500 的宽度,但会告诉您您正在寻找的高度。

顺便说一句,仅在绘制到打印机时才使用 DrawString/MeasureString。对于呈现到屏幕上的文本,您应该改用 TextRenderer。

于 2013-12-30T17:16:39.660 回答
2

听起来您需要考虑 WordBreak 标志:

int h = 0;
using (Graphics g = CreateGraphics()) {
  using (Font f = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular)) {
    h = TextRenderer.MeasureText(msg, f, new Size(200, 0), 
                                 TextFormatFlags.WordBreak).Height;
  }
}
于 2013-12-30T17:15:22.947 回答