【发布时间】:2010-03-13 04:56:28
【问题描述】:
我正在运行时创建一个 GroupBox 并设置它的 Text 属性。通常,文本只占一行,但有时会换行。问题是 GroupBox 中包含的控件掩盖了 GroupBox 的文本。
我想做的是确定文本是否以及何时换行。具体来说,我想确定与单行相比,包装文本占用了多少额外高度。这样,我可以重新定位 GroupBox 的控件并调整其高度。
最初,我想通过调用 GroupBox 的 CreateGraphics() 方法并使用 Graphics 来测量字符串来做到这一点。像这样的:
private void SetGroupBoxText(GroupBox grp, string text)
{
const int somePadding = 10;
Graphics g = grp.CreateGraphics();
SizeF textSize = g.MeasureString(text, grp.Font);
if (textSize.Width > (grp.Width - somePadding))
{
// Adjust height, etc.
}
}
问题在于g.MeasureString(text, grp.Font) 生成的大小似乎并不准确。我通过放置足够多的单个字符来导致换行,然后测量结果字符串来确定它不准确。
例如,需要 86 个管道 (|) 直到发生换行。当我测量那根绳子时,它的宽度约为 253。并且需要 16 个大写 W 来强制换行 - 它的字符串的宽度约为 164。这是我测试的两个极端。我的 GroupBox 的宽度是 189。(a 占用 29,宽度约为 180,O 占用 22,宽度约为 189)
有人有什么想法吗? (黑客、WinAPI 等都是受欢迎的解决方案)
【问题讨论】: