我对.NET Compact Framework的Label和TextBox控件缺少AutoSize属性感到非常烦恼。我有一个简单的应用程序,旨在在TabControl中列出一些文本数据(通常是一行到几段文字之间)。除此之外,其他所有功能都运行顺畅,但是我尝试动态调整用于显示文本的Label / TextBox控件的大小却失败了。
这是我尝试的方法:
/*
Variables:
s = The text intended for the TextBox
NewTB = TextBox object
width = Intended width
whiteSpaceAdjustment = amount of pixels per line to adjust "wasted" whitespace due to wrapping
*/
String[] linesArray = s.Replace(Environment.NewLine, "\n").Split(new char[] { '\n' });
int lines = 0;
int lineHeight = g.MeasureString(
s.Replace("\n", "").Replace("\r", ""),
LabelFont
).ToSize().Height;
foreach (String str in linesArray) {
if (str.Length == 0) {
lines++;
continue;
}
szz = g.MeasureString(str, LabelFont).ToSize();
lines += szz.Width / (width - whiteSpaceAdjustment);
lines += (szz.Width % width) != 0 ? 1 : 0;
}
NewTB.Height = lines * lineHeight;
NewTB.Width = width;
...但问题在于 whiteSpaceAdjustment 所需的范围太大了。当它足够大以实际处理最极端的情况(由大多数长单词构成的段落)时,大多数框会变高一两行。
我可能需要自己实现换行,但在这之前,是否有任何人已经有了一个漂亮干净的解决方案呢?
如果有人能够提供帮助,我会永远感激不尽!