我正在使用常规System.Windows.Form.RichTextBox
控件在.NET Framework 2.0上运行的WinForm应用程序来显示状态日志。由于Form和其他几个子控件具有AutoSize=True
,因此应用程序在不同的设置上看起来并不总是相同。我无法事先知道控件的确切大小,无论如何我猜有一些与每个特定配置的比率(字体外观)/(gui尺寸)相关的含义。
现在让我们描绘一下最具活力的情景。我想知道字符串的确切最大长度是什么,给定的RichTextBox可以显示在同一行(不超出边框或自动换行),这样的RichTextBox使用通用且已知的monospaced font和大小。
如果没有任何直接的方法来完成这个结果,无论如何都知道我是否可以使用任何类型的技巧,例如注入一个逐渐增长的测试字符串,直到一些奇怪的事件被触发?
答案 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;
}