更改文本框高度?

如何更改文本框的高度?

以下任何一项都不起作用:

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

要么

this.TextBox1.Size.Height = 100;

我希望能够更改单行文本框的高度以适合其上的字体大小,并且尽可能不使用多行。

Guapo asked 2020-07-01T23:39:23Z
21个解决方案
62 votes

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

this.textBox2.AutoSize = false;

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

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

将像魅力一样工作-无需将multiline设置为true,但仅在更改设计器本身中的任何选项之前(必须再次设置这两行)。我认为,这种方法仍然比多行更好。 我的应用程序中有一个昵称文本框,并且使用多行显示,人们有时会不小心写了两次姓名,例如Thomas \ nThomas(在实际的文本框行中只看到一个)。 使用此解决方案,在每个字符的宽度太长之后,文本仅隐藏在左侧,因此对于用户来说,输入输入文本更为安全。

Tomasz Szymański answered 2020-07-01T23:40:14Z
54 votes

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

  • 将文本框的“多行”属性设置为true,在这种情况下,您不需要这样做。
  • 在文本框中设置更大的字体

我相信这是唯一的方法。 较大的字体应自动适合文本框

MrRoy answered 2020-07-01T23:39:45Z
25 votes

您可以设置文本框的MinimumSize和/或MaximumSize属性。 这不会立即影响大小,但是在窗体设计器中调整文本框大小时,将自动调整大小以满足最小/最大大小限制。 即使将Multiline设置为false,这也不起作用,并且与字体大小无关。

Olivier Jacot-Descombes answered 2020-07-01T23:40:35Z
8 votes

设置最小尺寸属性

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

这对我有用。

Salty answered 2020-07-01T23:40:59Z
5 votes

刚刚发现了一个很棒的小技巧,可以为文本框设置自定义高度。

在设计器视图中,将minimumSize设置为所需的值,然后完全删除size的设置。 这将导致设计者使用新的最小设置进行更新!

Johnathan Brown answered 2020-07-01T23:41:24Z
3 votes
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;
    }
YDS answered 2020-07-01T23:41:39Z
2 votes

尝试以下方法:)

        textBox1.Multiline = true;
        textBox1.Height = 100;
        textBox1.Width = 173;
Rauf answered 2020-07-01T23:41:59Z
1 votes

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

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

我以这种方式解决了。

amiralles answered 2020-07-01T23:42:23Z
1 votes

AutoSize,Minimum,Maximum不具有灵活性。 使用多行并处理Enter键事件并抑制按键。 效果很好。

textBox1.Multiline = true;

 private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.Handled = true;
                e.SuppressKeyPress = true;
            }
        }
pili answered 2020-07-01T23:42:43Z
0 votes

对我而言,最好的方法是删除文本框的边框,然后将其放置在面板中,该面板可以根据需要进行自定义。

Harvey Triana answered 2020-07-01T23:43:03Z
0 votes

在调用InitializeComponent()之后在构造函数中添加以下代码,可以以编程方式将文本框设置为正确的高度,而无需a)更改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;
        }
    }
}
Tom Bogle answered 2020-07-01T23:43:28Z
0 votes

您可以将其放在具有与所需高度相同的背景色的面板中。 这种方式的优点是文本框可以水平居中,而其他解决方案则无法提供。

您可以使用以下方法使其更加自然

    private void textBox1_Enter(object sender, EventArgs e)
    {

        panelTextBox.BorderStyle = BorderStyle.FixedSingle;
    }

    private void textBox1_Leave(object sender, EventArgs e)
    {
        panelTextBox.BorderStyle = BorderStyle.None;
    }
Ahmad answered 2020-07-01T23:43:53Z
0 votes

你们中有些人很亲密,但是像那样更改设计人员代码很烦人,因为您总是必须返回并再次更改它。

最初的OP可能使用的是.net的较早版本,因为版本4会自动调整文本框的高度以适合字体,但不会使组合框和文本框的尺寸相同,这是一个完全不同的问题,但吸引了我。

这是在表单上的组合框旁边放置文本框时遇到的问题。 这有点恼人,因为谁想要两个高度不同的控件并排放置? 还是用不同的字体来强制高度? 加强Microsoft,这应该很简单!

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

在表单加载事件中(或在InitializeComponent之后触发的任何时间):textbox.AutoSize = false然后将高度设置为所需的高度。 对我来说,我希望文本框和组合框的高度相同,因此textbox.height = combobox.height为我完成了任务。

笔记:

1)设计人员不会受到影响,因此将要求您启动项目以查看最终结果,因此可能会遇到一些反复试验。

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

JoeMilo answered 2020-07-01T23:44:45Z
0 votes

脚步:

  1. 将文本框设置为多行
  2. 改变高度
  3. 更改字体大小。 (因此适合大文本框)
  4. 将文本框设置回非多行
666NotFound answered 2020-07-01T23:45:22Z
0 votes

这对我来说很好,因为我要做的就是设置文本框的高度。 该属性为只读,并且该属性在Unit类中,因此您不能仅对其进行设置。 因此,我刚刚创建了一个新的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;
IQtheMC answered 2020-07-01T23:45:42Z
0 votes

最简单的方法

1 ..右键单击文本框

2.去财产

设置多行= True

现在完成它将自动更改文本框的大小

和您也可以自定义

ArunPratap answered 2020-07-01T23:46:24Z
-1 votes

你也可以改变你也可以改变MinimumSize

Nandu answered 2020-07-01T23:46:44Z
-1 votes

因此,在遇到无法在文本框中调整高度的同样问题之后,“宽度”调整很好,但从未根据上述建议调整高度(至少对我而言),我终于能够实现这一目标。 如上所述,问题似乎集中在我的文本框中的默认字体大小设置上,并且文本框的行为围绕其自动调整大小。 默认字体大小很小。 因此,为什么要尝试强制提高高度甚至关闭自动调整大小,都无法为我解决此问题。

将Font属性设置为您喜欢的大小,然后高度变化将自动在FONT大小附近开始。 您仍然可以手动设置文本框的宽度。 以下是我添加的对我有用的代码段。

    $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)'中的Height值将被忽略,并且FONT大小实际上是通过围绕该字体大小自动调整大小来控制文本框的高度。

TerryG answered 2020-07-01T23:47:14Z
-1 votes

您所要做的就是在属性窗口中启用多行,将所需的大小放在同一窗口中,然后在InitializeComponent放置txtexample.Multiline = false;后的.cs中。 因此未启用多行,但是txt的大小与您输入的大小相同。

InitializeComponent();
txtEmail.Multiline = false;
txtPassword.Multiline = false;

enter image description here

enter image description here

enter image description here

Derek Duran answered 2020-07-01T23:47:34Z
-2 votes

我认为这应该有效。

TextBox1.Height = 100;
KaeL answered 2020-07-01T23:47:54Z
-3 votes

我知道这是一篇旧文章,但我发现自己也遇到了同样的问题,通过调查研究发现,WinForms TextBox的高度实际上是根据其包含的字体大小来计算的, 相当。

这个家伙解释了如何完成计算,以及如何在TextBox上进行设置以获得所需的高度。

干杯!

cgledezma answered 2020-07-01T23:48:23Z
translate from https://stackoverflow.com:/questions/5853073/change-the-textbox-height