测量RichTextBox每行可以容纳的字符数

3

给定一个C# Winforms RichTextBox,我想知道一行上可以容纳多少个字符。我知道我的字体(等宽字符)和字号大小。

谢谢, 肖恩

2个回答

1

我注意到测量一个字符会添加一些额外的空间,这不足以表示一个字符的实际宽度。

private int CalculateMaxDescriptionLineLength()
{
    Graphics g = _tb.CreateGraphics();
    float twoCharW = g.MeasureString("aa", _tb.Font).Width;
    float oneCharW = g.MeasureString("a", _tb.Font).Width;
    return (int)((float)_tb.Width / (twoCharW - oneCharW));
}

感谢Sergey将我引向正确的方向。


尝试使用TextRenderer.MeasureText。由于.NET2.0使用TextRenderer(GDI)而不是Graphics(GDI +),它们之间存在差异。 - Alexander Petrov
我尝试使用TextRenderer,但注意到它返回的是Size而不是SizeF,这意味着在测量字符串时会引入舍入误差。该误差随后会在文本框的宽度上累积,导致对原始问题的回答不够准确。 - sean.net

0
如果您的字体是等宽字体,只需通过 Graphics.MeasureString 测量一个字符的宽度,将文本框宽度除以该宽度即可:
static int GetWidthInChars(int widthInPixels, Font font, Graphics g)
{
    return (int) (widthInPixels / g.MeasureString ("a", font).Width);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接