如何获取特定RichTextBox控件的字符串的最大长度可以显示在同一行?

时间:2013-10-24 20:40:39

标签: c# .net winforms richtextbox

我正在使用常规System.Windows.Form.RichTextBox控件在.NET Framework 2.0上运行的WinForm应用程序来显示状态日志。由于Form和其他几个子控件具有AutoSize=True,因此应用程序在不同的设置上看起来并不总是相同。我无法事先知道控件的确切大小,无论如何我猜有一些与每个特定配置的比率(字体外观)/(gui尺寸)相关的含义。

现在让我们描绘一下最具活力的情景。我想知道字符串的确切最大长度是什么,给定的RichTextBox可以显示在同一行(不超出边框或自动换行),这样的RichTextBox使用通用且已知的monospaced font和大小。

如果没有任何直接的方法来完成这个结果,无论如何都知道我是否可以使用任何类型的技巧,例如注入一个逐渐增长的测试字符串,直到一些奇怪的事件被触发?

1 个答案:

答案 0 :(得分:0)

这就是我到现在为止所得到的。我在上面的问题中使用了TextRenderer类和我预期的策略。当然,只有控件使用等宽字体才有意义。尽管它适用于我的问题,但我仍然很想知道是否有人知道更好的方法来达到同一目标。所以问题仍然会持续一段时间。

int maxStringLength = GetMaxStringLengthPerLine(myRichTextBox);

int GetMaxStringLengthPerLine(RichTextBox textbox) {
   return GetMaxStringLength(textbox.Size.Width, textbox.Font);
}

int GetMaxStringLength(int width, Font font) {
   int i = 0;
   while(TextRenderer.MeasureText(new string('A',++i), font).Width<=width);
   return --i;
}