更改文本框高度?

Posted

技术标签:

【中文标题】更改文本框高度?【英文标题】:Change the Textbox height? 【发布时间】:2011-08-16 17:18:00 【问题描述】:

如何更改文本框的高度?

以下都不起作用:

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

this.TextBox1.Size.Height = 100;

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

【问题讨论】:

【参考方案1】:

你可以multiline : false,然后改变文本框上的文字大小,高度会自动增加

【讨论】:

【参考方案2】:

最简单的方法

    右键单击文本框。 转到属性。 设置多行 = True。

现在您可以随意调整 TextBox 的垂直大小了。

【讨论】:

【参考方案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;
    

【讨论】:

【参考方案4】:

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

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

【讨论】:

多行没有被激活,它只是用作改变高度的资源,但是如果我们在我们的文本框中按回车就不会换行了。【参考方案5】:

因此,在遇到无法在文本框中调整高度的相同问题后,宽度调整很好,但高度从未根据上述建议进行调整(至少对我而言),我终于能够做到这一点。如上所述,问题似乎集中在我的文本框中的默认字体大小设置以及围绕它的文本框自动调整大小的行为上。默认字体大小很小。因此,为什么尝试强制高度甚至关闭自动调整大小都无法为我解决问题。

将字体属性设置为您喜欢的大小,然后高度会自动在字体大小附近发生变化。您仍然可以手动设置文本框宽度。下面是我添加的对我有用的 sn-p。

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

这对我来说很有效,因为我想做的只是设置文本框的高度。该属性是只读的,并且该属性在 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;

【讨论】:

【参考方案8】:

步骤:

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

【讨论】:

如果在将 multiline 设置回 false 之前将 size 值复制到 minimumSize,即使不更改字体大小也很有效。【参考方案9】:

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

【讨论】:

我发现了这种方法的一个怪癖——当放置在一个容器(如 TableLayoutPanel 的单元格)中并给它一个左右锚时,它不会正确垂直居中。它的垂直位置似乎是按照正常大小计算的。 @p0lar_bear:您可以将文本框放在大小合适的面板上作为解决方法,然后将此面板放在 TableLayoutPanel 单元格中。 @OlivierJacot-Descombes:是的。不过,我的观点是,如果你要做一些可能会造成这样混乱的事情,那么按照本页其他地方的建议,将其设置为多行文本框并抑制 Enter 键会更易于管理(尽管我知道它是不是 OP 想要的——它对我有用)。 另一种解决方法是调整文本框的Margin 属性或容器控件的Padding 属性。【参考方案10】:

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

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

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

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

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

注意事项:

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

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

【讨论】:

你的想法让我很感兴趣,直到我意识到 TextBox 上的 AutoSize 属性在 asp.net 4.6.2 表单上不可用。它仅适用于 winform。【参考方案11】:

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

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

    private void textBox1_Enter(object sender, EventArgs e)
    

        panelTextBox.BorderStyle = BorderStyle.FixedSingle;
    

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

【讨论】:

【参考方案12】:

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

【讨论】:

【参考方案13】:

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

在设计器视图中,将minimumSize 设置为您想要的任何值,然后完全删除size 设置。这将导致设计师使用新的最低设置进行更新!

【讨论】:

在设计器中短暂工作,但一旦保存,它就会恢复到之前的高度。 那该死的!这可能是他们修复的错误。不过,如果您想要更大的文本框,只需更改文本大小即可。【参考方案14】:

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;
            
        

【讨论】:

如果用户输入太多文本,文本仍会自动换行,因此覆盖输入是不够的。将 Multiline 设置为 true 绝对不是这个问题的答案,无论有多少人将它作为正确的解决方案发布。 (如果您真的想要一个多行文本框,这是一个很好的解决方案。)【参考方案15】:

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

this.textBox2.AutoSize = false;

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

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

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

【讨论】:

不,因为 A/ 如果文本框停靠 B/ 则它不起作用 B/ 正如所指出的,在设计器中更改它会破坏修复 手动更改设计器文件通常不是解决任何问题的好方法。几乎总是会在以后遭到重创。 我可以确认 Adam 的回答和 Franck 的评论,AutoSize 确实对智能感知隐藏。 如果您输入完整,它将被识别为有效代码。试一试,然后按下 Ctrl 并在下划线时单击 AutoSize,您将在 TextBoxBase 中看到公共覆盖方法(来自元数据)。【参考方案16】:

对我来说,最好的办法是去掉文本框的边框,把它放在一个面板里面,可以随意定制。

【讨论】:

但这并不能解决问题。它使 border 看起来正确,但 text 仍然会以较大的字体大小被剪裁。【参考方案17】:

设置最小尺寸属性

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

这对我有用。

【讨论】:

【参考方案18】:

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

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

我就是这样解决的。

【讨论】:

【参考方案19】:

试试下面的:)

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

【讨论】:

【参考方案20】:

我认为这应该可行。

TextBox1.Height = 100;

【讨论】:

【参考方案21】:

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

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

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

【讨论】:

为什么这被标记为正确答案? Adam's 设置AutoSize = false 的答案然后设置尺寸是正确的答案。

以上是关于更改文本框高度?的主要内容,如果未能解决你的问题,请参考以下文章

动态增加文本框高度? [复制]

如何仅在悬停时显示截断的文本而不更改框列表的高度?

<!DOCTYPE html> 更改输入文本框大小(高度和宽度)[重复]

如何通过在 C# windows 窗体中的文本框中输入来更改图像的大小?

用Vue实现高度自增的文本框

js怎么取得文本框的宽度与高度