C# 测量RichTextBox在一行中可以包含的字符数

C# 测量RichTextBox在一行中可以包含的字符数,c#,winforms,richtextbox,measure,C#,Winforms,Richtextbox,Measure,给定一个C#Winforms RichTextBox,我想知道一行可以容纳多少个字符。我知道我的字体(等距字符)和字体大小 干杯, Sean如果您的字体为单空格,只需将文本框宽度除以一个字符的宽度,即: 我注意到测量一个字符会增加一些额外的空间,这不足以代表一个字符的实际宽度 private int CalculateMaxDescriptionLineLength() { Graphics g = _tb.CreateGraphics(); float twoCharW = g

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

干杯,
Sean

如果您的字体为单空格,只需将文本框宽度除以一个字符的宽度,即:


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

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让我走上正确的道路。

尝试使用
textrender.MeasureText
。因为.NET2.0使用
文本渲染器
(GDI)而不是
图形
(GDI+)。它们之间存在差异。我尝试使用TextRenderer,但注意到它返回的是大小而不是SizeF,这意味着在测量字符串时引入了舍入误差。然后,该错误在文本框的宽度上复合,导致对原始问题的回答不太准确。
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));
}