如何正确计算带有 config的TextBoxMultiline = true
元素的高度,Margin = 3;3;3;3
以及不包含换行符的文本,但宽度取决于父元素的大小,而父元素的大小又取决于TextBox之前的内容?
目前,我使用以下代码尝试根据长度考虑自动连字:
string[] words = info.getDescription().Split(' ');
int heightIncrement = TextRenderer.MeasureText(info.getDescription(), this.labelDesc.Font).Height;
int fHeight = 0;
int lineWidth = 0;
int maxWidth = this.Width - 6; // Padding before left and right borders form and textbox.
int lines = 0;
for (int i = 0; i < words.Length; i++)
{
int wordWidth = TextRenderer.MeasureText(words[i], this.labelDesc.Font).Width;
if (lineWidth + wordWidth >= maxWidth)
{
lineWidth = wordWidth + 3; // Add space size after word.
fHeight += heightIncrement;
lines += 1;
continue;
}
lineWidth += wordWidth;
if (i < words.Length - 1)
lineWidth += 3; // Add space size after word.
}
this.labelDesc.Width = this.Width - 6;
this.labelDesc.Height = fHeight;
this.labelDesc.Text = info.getDescription();
this.labelDesc.Visible = true;
在 50% 的情况下是猜测。在 40% 时,它将高度增加 1-2 行。在 10% 的情况下会丢失一条线。
该问题已通过将TextBox替换为Label并根据表单的当前宽度控制Label的最大允许宽度来解决。在这种情况下,父元素的AutoSize可以充分发挥作用。