gpt4 book ai didi

c# - .NET Compact Framework 中标签/文本框的自动调整大小

转载 作者:太空狗 更新时间:2023-10-30 01:28:22 24 4
gpt4 key购买 nike

在 .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 所需的范围太大了。当它大到足以实际处理最极端的情况(段落主要由非常长的单词组成)时,大多数框最终会变得一两行太高。

我可能不得不自己实现自动换行,但在我去那里之前,有没有人为此准备好干净的解决方案?

我将永远感激不尽!

最佳答案

试试这篇文章

www.mobilepractices.com/2007/12/multi-line-graphicsmeasurestring.html

请确保您还查看了文章底部的链接,以便能够使用不同的字体。

如果您使用的是 .Net CF 3.5,您可以将他们的示例转换为扩展方法。否则,我建议您创建一个继承自框架控件的新控件。

关于c# - .NET Compact Framework 中标签/文本框的自动调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/767335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com