更改文本框的高度?

如何更改文本框的高度?

下面的工作都不是:

this.TextBox1.Size = new System.Drawing.Size(173, 100); 

要么

 this.TextBox1.Size.Height = 100; 

我希望能够更改单行文本框高度,以适应字体大小,如果可能的话,不使用多行。

有两种方法可以做到这一点 :

  • 设置文本框的“多行”属性为true,在这种情况下,你不想这样做;
  • 设置一个更大的字体大小的文本框

我相信这是唯一的办法。 更大的字体大小应该自动适应文本框

进入yourForm.Designer.cs向下滚动到您的文本框。 下面的例子是针对textBox2对象的。 添加这个

 this.textBox2.AutoSize = false; 

并将其大小设置为任何你想要的

 this.textBox2.Size = new System.Drawing.Size(142, 27); 

将工作像一个魅力 – 没有设置多行为真,但直到你改变devise师本身的任何选项(你将不得不再次设置这两行)。 我认为,这种方法仍然比multilining更好。 在我的应用程序和多行中,我有一个昵称的文本框,人们有时会偶尔写两次他们的名字,像Thomas \ nThomas(你在实际的文本框行中只看到一个)。 有了这个解决scheme,每个字符宽度过长后,文本只是隐藏在左边,所以对用户来说,input更安全。

您可以设置文本框的MinimumSize和/或MaximumSize属性。 这不会立即影响大小,但是当您调整窗体devise器中的文本框大小时,将自动resize以满足最小/最大大小限制。 即使在Multiline设置为false并且不依赖于字体大小的情况下,此function也可以工作。

设置最小大小的属性

 tb_01.MinimumSize = new Size(500, 300); 

这是为我工作。

 public partial class MyTextBox : TextBox { [DefaultValue(false)] [Browsable(true)] public override bool AutoSize { get { return base.AutoSize; } set { base.AutoSize = value; } } public MyTextBox() { InitializeComponent(); this.AutoSize = false; } 

刚刚发现一个很好的小窍门,将自定义高度设置为文本框。

在devise器视图中,将minimumSize设置为所需的任意值,然后完全删除size设置。 这将导致devise师更新新的最低设置!

试试以下:)

  textBox1.Multiline = true; textBox1.Height = 100; textBox1.Width = 173; 

AutoSize,最小值,最大值不能提供灵活性。 使用多行处理回车键事件并禁止按键。 很好用。

 textBox1.Multiline = true; private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { e.Handled = true; e.SuppressKeyPress = true; } } 

可能会晚一点。 但是你可以做到这一点。

 txtFoo.Multiline = true; txtFoo.MinimumSize = new Size(someWith,someHeight); 

我这样解决了。

对我来说,最好的办法是删除文本框的边界,并将其放置在一个面板,可以自定义,只要你喜欢。

在调用InitializeComponent()之后,在构造函数中添加的以下代码将使您可以以编程方式将文本框设置为正确的高度,而无需更改Multiline属性,b)必须对高度进行硬编码,或c)使用Designer-生成的代码。 它还不一定像在自定义控件中那样干净或好看,但它相当简单和强大:

 if (txtbox.BorderStyle == BorderStyle.None) { txtbox.BorderStyle = BorderStyle.FixedSingle; var heightWithBorder = txtbox.ClientRectangle.Height; txtbox.BorderStyle = BorderStyle.None; txtbox.AutoSize = false; txtbox.Height = heightWithBorder; } 

我决定把它放在一个静态类中,并使之成为TextBox的一个扩展方法,使它更简洁易用。

 public static class TextBoxExtensions { public static void CorrectHeight(this TextBox txtbox) { if (txtbox.BorderStyle == BorderStyle.None) { txtbox.BorderStyle = BorderStyle.FixedSingle; var heightWithBorder = txtbox.ClientRectangle.Height; txtbox.BorderStyle = BorderStyle.None; txtbox.AutoSize = false; txtbox.Height = heightWithBorder; } } } 

你可以把它放在一个与你想要的高度相同的背面板上。 这种方式有这个优点,文本框可以水平居中,这是其他解决scheme不提供的。

你可以使用下面的方法使它更自然

  private void textBox1_Enter(object sender, EventArgs e) { panelTextBox.BorderStyle = BorderStyle.FixedSingle; } private void textBox1_Leave(object sender, EventArgs e) { panelTextBox.BorderStyle = BorderStyle.None; } 

你们中的一些人很亲密,但不断变化的devise师代码很烦人,因为你总是不得不返回去改变它。

原来的OP可能使用旧版本的.net,因为版本4自动化文本框的高度,以适应字体,但没有大小的combobox和文本框相同这是一个完全不同的问题,但在这里画了我。

当在窗体上放置combobox旁边的文本框时,这是我遇到的问题。 这有点刺激,因为谁想要两个不同高度的控制并列? 还是不同的字体强制高度? 一步一步微软,这应该是简单的!

我在VS2012中使用.net framework 4,以下是我最简单的解决scheme。

在表单加载事件(或任何只要在InitializeComponent之后触发): textbox.AutoSize = false然后将高度设置为任何你想要的。 对我来说,我想我的文本框和combobox是相同的高度,所以textbox.height = combobox.height为我做了诡计。

笔记:

1)devise人员不会受到影响,因此需要您启动项目才能看到最终结果,因此可能会有一些试验和错误。

2)调整您的combobox和文本框的顶部,如果您希望它们在resize后正确alignment,因为文本框会变小。

脚步:

  1. 将文本框设置为多行
  2. 改变高度
  3. 更改字体大小。 (所以它适合大文本框)
  4. 将文本框设回非多行

这是对我来说很好,因为我想要做的就是设置文本框的高度。 该属性是只读的,属性在Unit类中,所以你不能只设置它。 所以我刚刚创build了一个新的Unit,构造函数让我设置高度,然后将文本框设置为该单位。

 Unit height = txtTextBox.Height; double oldHeight = height.Value; double newHeight = height.Value + 20; //Added 20 pixels Unit newHeightUnit = new Unit(newHeight); txtTextBox.Height = newHeightUnit; 

我认为这应该工作。

 TextBox1.Height = 100; 

我知道这是一个旧的post,但我发现自己在这个相同的问题,并通过调查了一下,我发现一个WinForms文本框的高度实际上是根据它包含的字体的大小计算,它只是不相当于它。

这个人解释了如何完成计算,以及如何设置它在你的文本框来获得所需的高度。

干杯!