为了账号安全,请及时绑定邮箱和手机立即绑定

调整 TextBox 的高度

调整 TextBox 的高度

C#
潇潇雨雨 2021-09-19 16:42:10
我正在处理包含多行文本框的 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属性时自动调整高度)?
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

TextBox.GetPositionFromCharIndex返回字符的像素位置。此处的位置表示顶部/左侧,因此我们需要再添加一行..

这似乎在这里工作:

textBox.Height = textBox.GetPositionFromCharIndex(textBox4.Text.Length - 1).Y + lineHeight;

我得到这样的行高:

int lineHeight = -1;
using (TextBox t = new TextBox() { Font = textBox.Font }) lineHeight = t.Height;

我设置了Height而不是ClientSize.Height,这有点错误,除非BorderStyleNone。您可以更改为textBox.ClientSize = new Size(textBox.ClientSize.Width, l + lh);


查看完整回答
反对 回复 2021-09-19
  • 1 回答
  • 0 关注
  • 454 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信