我正在处理包含多行文本框的 UserControl。
使用我的控件时,将能够设置将显示的文本。然后 TextBox 应调整其高度以使文本适合,宽度不能更改。
所以这里是处理文本的属性:
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public string TextToDisplay
{
get
{
return internalTextBox.Text;
}
set
{
internalTextBox.Text = value;
AdaptTextBoxSize();
}
}
我的第一次尝试相当简单:
private void AdaptTextBoxSize()
{
int nbLignes = internalTextBox.Lines.Length;
float lineHeight = internalTextBox.Font.GetHeight();
internalTextBox.Height = (int)((nbLignes) * lineHeight);
}
这不起作用,因为它没有考虑两行文本之间的间距。所以我在文本中的行越多,我被剪掉的就越多。
所以我试过这个:
private void AdaptTextBoxSize()
{
Size textSize = internalTextBox.GetPreferredSize(new Size(internalTextBox.Width, 0));
internalTextBox.Height = textSize.Height;
}
当文本框中的所有行都短于宽度时,这确实有效。但是当一行较长并且应该剪裁到下一行时,GetPreferredSize()返回的宽度大于我通过的宽度,因此高度太小。
所以我再次改变并尝试了这个:
private void AdaptTextBoxSize()
{
Size textSize = TextRenderer.MeasureText(
internalTextBox.Text,
internalTextBox.Font,
new Size(internalTextBox.Width, 0),
TextFormatFlags.WordEllipsis
);
internalTextBox.Height = textSize.Height;
}
这次返回的 Width 是正确的,没有超过我通过的那个,但是高度和之前的试验一样。所以它也不起作用。我为 尝试了不同的组合TextFormatFlags,但无法找到获胜的组合...
这是框架的错误吗?
这里真正的问题是,有没有我可以尝试的另一件事,或者另一件事来实现我想要的(即在设置TextToDisplay属性时自动调整高度)?
慕的地8271018
相关分类