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

本文关键字:显示 一行 字符串 获取 何获取 RichTextBox 控件 | 更新日期: 2023-09-27 18:36:44

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

所以现在让我们描述一下最动态的场景。我想知道字符串的确切最大长度是多少,给定的 RichTextBox 可以在同一行上显示(不超过边框或自动换行),而这样的 RichTextBox 使用通用且已知的等宽字体和大小。

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

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

这就是我到现在为止得到的。我使用了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;
}