C#调整文本框大小以适合内容

use*_*289 26 c# textbox resize

我正在编写一个程序,用户应该能够在文本框中编写文本.我希望文本框能够自行调整大小,因此它适合内容.我尝试过以下方法:

private void textBoxTitle_TextChanged(object sender, TextChangedEventArgs e)
{
    System.Drawing.Font myFont = new System.Drawing.Font("Verdana", 8);
    System.Drawing.SizeF mySize = e.Graphics.MeasureString("This is a test", myFont);
    this.textBoxTitle.Width = (int)Math.Round(mySize.Width, 0);
}
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,说Graphics不适用于TextChangedEventArgs.还有另一种方法可以调整文本框的大小吗?

Sai*_*ala 60

您应该尝试类似下面的代码.它对我有用.

private void textBox1_TextChanged(object sender, EventArgs e)
{
  Size size = TextRenderer.MeasureText(textBox1.Text, textBox1.Font);
  textBox1.Width = size.Width;
  textBox1.Height = size.Height;
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅TextRenderer.MeasureText()


Mik*_*erk 6

我正在添加这个答案,因为我没有看到fixed width任何其他文本框的讨论方面.如果文本框的宽度固定,并且只想调整其高度,则可以执行以下操作:

像这样的东西给出了文本的高度,就像它在多行文字包装文本框中的绘制方式一样:

SizeF MessageSize = MyTextBoxControl.CreateGraphics()
                                .MeasureString(MyTextBoxControl.Text,
                                                MyTextBoxControl.Font,
                                                MyTextBoxControl.Width, 
                                                new StringFormat(0));
Run Code Online (Sandbox Code Playgroud)

我不确定StringFormat应该是什么,但这些值StringFormatFlags似乎不适用于默认TextBox化妆.

现在随MessageSize.Height你知道文本框中文本的高度.


小智 6

我遇到了同样的问题,我以更简单的方式解决了它。

我使用了 Label 控件的 AutoSize 属性。我在表单中添加了一个不可见的标签,将其 AutoSize 属性设置为 True。当我需要更改 TextBox 的大小时,我使用以下代码:

MyLabel.Text = MyTextBox.Text;
MyTextBox.Size = MyLabel.Size;
Run Code Online (Sandbox Code Playgroud)

我设置了标签的最大和最小尺寸以获得更好的结果。玩得开心