更改文本框高度?

时间:2011-05-02 02:41:02

标签: c# winforms .net-3.5 textbox

如何更改文本框的高度?

以下两项均无效:

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

this.TextBox1.Size.Height = 100;

我希望能够在不使用多行的情况下更改单行文本框高度以适应字体大小。

22 个答案:

答案 0 :(得分:58)

进入yourForm.Designer.cs 向下滚动到您的文本框。下面的示例适用于textBox2对象。 添加此

this.textBox2.AutoSize = false;

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

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

将像魅力一样工作 - 不将多线设置为true,但只有在您更改设计器本身的任何选项之后(您将不得不再次设置这两行)。 我认为,这种方法仍然比多线化更好。我在我的应用程序中有一个昵称的文本框,并且有多行,人们有时会意外地写两次名字,比如Thomas \ nThomas(你在实际的文本框行中只看到一个)。使用这个解决方案,文本只是在每个char之后隐藏到左边的宽度,所以对于用户来说,放置输入更安全。

答案 1 :(得分:53)

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

  • 将文本框的“multiline”属性设置为true,在这种情况下,您不希望这样做;
  • 将更大的字体大小设置为文本框

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

答案 2 :(得分:25)

您可以设置文本框的MinimumSize和/或MaximumSize属性。这不会立即影响大小,但是当您在窗体设计器中调整文本框大小时,将自动调整大小以满足最小/最大大小约束。即使Multiline设置为false并且不依赖于字体大小,此功能仍然有效。

答案 3 :(得分:8)

设置最小尺寸属性

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

这对我有用。

答案 4 :(得分:4)

刚刚找到了一个很好的小技巧,可以将自定义高度设置为文本框。

在设计器视图中,将minimumSize设置为您想要的任何内容,然后完全删除size设置。这将使设计人员使用新的最小设置进行更新!

答案 5 :(得分:3)

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;
    }

答案 6 :(得分:2)

尝试以下方法:)

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

答案 7 :(得分:1)

可能有点晚了。但你可以这样做。

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

我解决了这个问题。

答案 8 :(得分:1)

AutoSize,Minimum,Maximum不提供灵活性。使用多行并处理回车键事件并禁止按键。效果很好。

textBox1.Multiline = true;

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

答案 9 :(得分:0)

您可以制作<div class="container"> <div class="carousel"> <h2>It shouldn't work here outside of the carousel</h2> <div class="track"> <div class="card"></div> <div class="card"></div> <div class="card"></div> <div class="card"></div> <div class="card"></div> <div class="card"></div> <div class="card"></div> <div class="card"></div> <div class="card"></div> <div class="card"></div> </div> </div> </div>,然后只需更改文本框上的文字大小,高度就会自动增加

答案 10 :(得分:0)

  

最简单的方法

1 ..右键单击文本框

2 ..去财产

  

设置Multiline = True

现在完成它会自动更改TextBox的大小

和 你也可以自定义

答案 11 :(得分:0)

这对我来说很有效,因为我想做的就是设置文本框的高度。该属性是只读的,属性在Unit类中,因此您无法设置它。所以我刚创建了一个新单元,构造函数让我设置高度,然后将文本框设置为该单元。

~/.inputrc

答案 12 :(得分:0)

步骤:

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

答案 13 :(得分:0)

你们中的一些人很接近,但更改设计师代码是很烦人的,因为你总是要回去再改变它。

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

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

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

在表单加载事件中(或在InitializeComponent之后触发的任何地方):textbox.AutoSize = false然后将高度设置为您想要的任何值。对我来说,我希望我的文本框和组合框的高度相同,所以textbox.height = combobox.height为我做了诀窍。

注意:

1)设计师不会受到影响,因此需要您启动项目以查看最终结果,因此可能会出现一些反复试验。

2)如果您希望在调整大小后正确对齐组合框和文本框的顶部,因为文本框会逐渐缩小。

答案 14 :(得分:0)

您可以将其放在具有所需高度的相同背景颜色的面板内。这种方式具有文本框可以水平居中的优点,这是其他解决方案所不具备的。

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

    private void textBox1_Enter(object sender, EventArgs e)
    {

        panelTextBox.BorderStyle = BorderStyle.FixedSingle;
    }

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

答案 15 :(得分:0)

在调用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;
        }
    }
}

答案 16 :(得分:0)

对我来说,最好的方法是删除文本框的边框,并将其放在Panel中,可以根据需要自定义。

答案 17 :(得分:-1)

您还可以更改,也可以更改MinimumSize

答案 18 :(得分:-1)

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

将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大小实际上控制着通过围绕该字体大小自动调整大小。

答案 19 :(得分:-1)

所有您需要做的就是在属性窗口中启用多行,将所需的大小放在同一窗口中,然后在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

答案 20 :(得分:-2)

我知道这是一个老帖子,但我发现自己处于同一个问题,通过调查我发现WinForms TextBox的高度实际上是根据它包含的字体大小来计算的,它与它不完全相同。

This guy解释了如何完成计算,以及如何在TextBox上设置它以获得所需的高度。

干杯!

答案 21 :(得分:-2)

我认为这应该有用。

TextBox1.Height = 100;