关于c#:更改文本框高度? 您所在的位置:网站首页 lg830调高度 关于c#:更改文本框高度?

关于c#:更改文本框高度?

2024-02-23 21:08| 来源: 网络整理| 查看: 265

如何更改文本框的高度?

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

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

要么

1this.TextBox1.Size.Height = 100;

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

相关讨论 您在postback上吗? 你试过我的答案了吗? @KaeL早期无法检查它,所以我当时没有回复您,但是我已经尝试并回复了它。 尽管回复的帖子很旧,您也可以尝试使用此TextMode =" MultiLine" Columns =" 50" Rows =" 5"

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

1this.textBox2.AutoSize = false;

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

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

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

相关讨论 不,因为A /如果将文本框停靠在B /上则不起作用B /如所指出的那样,在设计器中对其进行更改会破坏该修复程序 手动更改Designer文件通常不能解决任何问题。几乎总会在以后被破坏。 我可以确认Adams的回答和Francks的评论,AutoSize确实对智能感知而言是隐藏的。如果您完全输入,它将被识别为有效代码。尝试一下,然后按Ctrl键并在下划线时单击AutoSize,您将在TextBoxBase中看到公共重写方法(来自元数据)。

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

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

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

相关讨论 我确实尝试将字体大小设置为36,并且文本框完全没有显示出来。 @Guapo您使用什么代码设置字体?你能在这里复制吗? TextBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 36F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));无论如何,我还是使用了多框功能,但谢谢。 为什么将此标记为正确答案?设置AutoSize = false然后设置尺寸的Adams答案是正确的答案。

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

相关讨论 我已经用这种方法发现了一个怪癖-当放置在诸如TableLayoutPanel的单元格之类的容器中时,如果您给它提供一个左右锚,它就不会正确地垂直居中。它的垂直位置似乎是按正常大小计算的。 @ p0lar_bear:您可以将文本框放置在具有正确大小的面板上,作为解决方法,并将此面板放置在TableLayoutPanel单元格中。 @ OlivierJacot-Descombes:是的。不过,我的观点是,如果您打算做类似这样的潜在混乱的事情,那么将其设置为多行TextBox并抑制Enter键会更易于管理,如本页其他地方所述(尽管我知道它不是OP一直在寻找-适用于我)。 另一个解决方法是将文本框的Margin属性或容器控件的Padding属性设置为星期。

设置最小尺寸属性

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

这对我有用。

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

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

相关讨论 在Designer中可以立即工作,但是一旦保存,它就会回到以前的高度。 那该死!他们可能已修复了一个错误。但是,如果您想要更大的文本框,则只需更改文本大小即可。

尝试以下方法:)

123        textBox1.Multiline = true;         textBox1.Height = 100;         textBox1.Width = 173; 123456789101112131415161718192021public 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;     }

脚步:

将文本框设置为多行 改变高度 更改字体大小。 (因此适合大文本框) 将文本框设置回非多行 相关讨论 即使在将多行设置回false之前将size值复制到minimumSize,即使不更改字体大小,此方法也很好用。

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

12345678910textBox1.Multiline = true;  private void textBox1_KeyDown(object sender, KeyEventArgs e)         {             if (e.KeyCode == Keys.Enter)             {                 e.Handled = true;                 e.SuppressKeyPress = true;             }         } 相关讨论 如果用户输入过多的文本,该文本仍将自动换行,因此仅覆盖回车是不够的。不管有多少人将Multiline作为正确的解决方案,将Multiline设置为true绝对不是解决这个问题的答案。 (如果您实际上想要一个多行文本框,它是一个很好的解决方案。#39;)

the Simplest Way to do that

1 ..右键单击文本框

2.去财产

set Multiline =True

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

和 您也可以自定义

可能为时已晚。但是你可以做到这一点。

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

我以这种方式解决了。

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

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

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

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

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

我决定通过将其放在静态类中并使其成为TextBox的扩展方法,使其变得更整洁,更易于使用:

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

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

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

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

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

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

笔记:

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

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

相关讨论 在我意识到TextBox上的AutoSize属性在asp.net 4.6.2窗体上不可用之前,您的想法使我感兴趣。它仅适用于Winform。

这对我来说很好,因为我要做的就是设置文本框的高度。该属性为只读,并且该属性位于Unit类中,因此您不能仅对其进行设置。因此,我刚刚创建了一个新的Unit,构造函数让我设置了高度,然后将文本框设置为该Unit。

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

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

相关讨论 但这并不能解决问题。它使边框看起来正确,但是文本仍会被剪切为较大的字体大小。

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

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

相关讨论 多行没有被激活,仅被用作更改高度的资源,但是如果我们在文本框中按Enter键,则不会出现换行符。

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

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

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

12345    $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大小实际上是通过围绕该字体大小自动调整大小来控制文本框的高度。

我认为这应该有效。

1TextBox1.Height = 100;

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

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

干杯!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有