0

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

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

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

4

1 回答 1

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;
}
于 2013-10-24T21:16:48.870 回答