我正在运行时创建一个GroupBox并设置它的Text属性。通常,文本只在一行上,但有时会换行。问题是GroupBox中包含的控件覆盖了GroupBox的文本。
我想要做的是确定文本何时换行。具体来说,我想确定换行后多出的高度与单行相比有多少。这样,我就可以重新定位GroupBox的控件并调整其高度。
最初,我想通过调用GroupBox的CreateGraphics()方法,并使用Graphics来测量字符串来完成此操作。代码如下:
问题在于
例如,需要86个管道符(|)才能换行。当我测量该字符串时,其宽度约为253。需要16个大写字母W才能强制换行-其字符串宽度约为164。这是我测试的两个极端情况。我的GroupBox宽度为189。(a需要29个并且宽度约为180,O需要22个并且宽度约为189)
有人有什么想法吗?(黑客、WinAPI等都可以成为解决方案)
我想要做的是确定文本何时换行。具体来说,我想确定换行后多出的高度与单行相比有多少。这样,我就可以重新定位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等都可以成为解决方案)