改变文本框的高度?

68

如何改变文本框的高度?

以下两种方法都不起作用:

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

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

21个回答

1

也许有点晚了,但你仍然可以做到。

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

我是这样解决的。


1

最简单的方法

  1. 右键单击文本框。
  2. 进入属性。
  3. 设置Multiline = True。

现在您可以根据需要垂直调整文本框的大小。


0
在调用InitializeComponent()之后,将以下代码添加到您的构造函数中,可以使得您的文本框在编程时设置正确的高度而不需要a) 更改Multiline属性、b) 硬编码高度或c) 改变设计器生成的代码。这仍然不一定像在自定义控件中那样干净或好,但相当简单和健壮:
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;
        }
    }
}

0

这对我来说非常有效,因为我想要做的就是设置文本框的高度。该属性是只读的,并且该属性位于Unit类中,因此您无法直接设置它。所以我只需创建一个新的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;

0
对我来说,最好的做法是移除文本框的边框,并将其放置在面板内,以便根据需要进行自定义。

但这并没有解决问题。它使“边框”看起来正确,但“文本”在更大的字体大小下仍然被裁剪。 - Tom Bogle

0

有些人已经很接近了,但像这样改变设计师的代码是很烦人的,因为你总是不得不回去再次改变它。

原OP可能使用的是较旧版本的.net,因为版本4会自动调整文本框高度以适应字体,但不会将组合框和文本框尺寸调整到相同大小,这是一个完全不同的问题,但却让我来到这里。

当我在表单上将文本框放在组合框旁边时,我遇到了这个问题。这有点令人恼火,因为谁想要两个高度不同的控件并排放置?或者使用不同字体来强制高度?微软,加油,这应该很简单!

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

在窗体加载事件(或任何其他任何事件,只要在InitializeComponent之后触发即可)中:textbox.AutoSize = false 然后将高度设置为所需值。对我而言,我希望我的文本框和组合框的高度相同,所以 textbox.height = combobox.height 对我很管用。

注意事项:

1)这不会影响设计师,因此需要启动项目才能看到最终结果,所以可能需要一些试错。

2) 如果您希望在调整大小后正确对齐文本框和组合框,请将它们的顶部对齐,因为文本框会向下增长。


你的想法让我很感兴趣,但是当我意识到在asp.net 4.6.2表单上AutoSize属性在TextBox上不可用时,我的兴趣就消失了。它只适用于winforms。 - Doreen

0

您可以设置 multiline : false,然后只需更改文本框的文本大小,高度就会自动增加。


-1
你所需要做的就是在属性窗口中启用多行功能,将所需大小设置在同一窗口中,然后在 .cs 文件中的 InitializeComponent 后添加 txtexample.Multiline = false; 这样就可以禁用多行功能,但文本框的大小仍按照你所设定的大小显示。
InitializeComponent();
txtEmail.Multiline = false;
txtPassword.Multiline = false;

enter image description here

enter image description here

enter image description here


多行文本框并未被激活,它只是被用作改变高度的资源,但如果我们在文本框中按回车键,将不会出现换行符。 - Derek Duran

-1

所以,在遇到无法调整文本框高度的问题时,虽然宽度调整正常,但是上述建议对我来说并没有解决高度调整的问题。最终,我终于找到了解决方法。如上所述,问题似乎集中在我的文本框中默认字体大小设置和文本框自动调整大小的行为上。默认字体大小非常小,因此尝试强制更改高度甚至关闭自动调整大小都无法解决我的问题。

将字体属性设置为您喜欢的大小,然后高度更改将自动围绕字体大小进行。您仍然可以手动设置文本框宽度。以下是我添加的代码片段,对我有效。

    $textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(60,300)
$textBox.Size = New-Object System.Drawing.Size(600,80)
$textBox.Font = New-Object System.Drawing.Font("Times New Roman",18,[System.Drawing.FontStyle]::Regular)
$textBox.Form.Font = $textbox.Font

请注意在“$textBox.Size = New-Object System.Drawing.Size(600,80)”中的高度值被忽略了,实际上字体大小控制着文本框的高度,通过自动调整字体大小来适应文本框。

-1

你也可以更改MinimumSize


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接