如何改变文本框的高度?
以下两种方法都不起作用:
this.TextBox1.Size = new System.Drawing.Size(173, 100);
或者this.TextBox1.Size.Height = 100;
我希望能够调整单行文本框的高度以适应其字体大小,如果可能的话,不使用多行文本框。
也许有点晚了,但你仍然可以做到。
txtFoo.Multiline = true;
txtFoo.MinimumSize = new Size(someWith,someHeight);
我是这样解决的。
最简单的方法
现在您可以根据需要垂直调整文本框的大小。
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;
}
}
}
这对我来说非常有效,因为我想要做的就是设置文本框的高度。该属性是只读的,并且该属性位于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;
有些人已经很接近了,但像这样改变设计师的代码是很烦人的,因为你总是不得不回去再次改变它。
原OP可能使用的是较旧版本的.net,因为版本4会自动调整文本框高度以适应字体,但不会将组合框和文本框尺寸调整到相同大小,这是一个完全不同的问题,但却让我来到这里。
当我在表单上将文本框放在组合框旁边时,我遇到了这个问题。这有点令人恼火,因为谁想要两个高度不同的控件并排放置?或者使用不同字体来强制高度?微软,加油,这应该很简单!
我在VS2012中使用.net framework 4,以下是对我最简单的解决方案。
在窗体加载事件(或任何其他任何事件,只要在InitializeComponent
之后触发即可)中:textbox.AutoSize = false
然后将高度设置为所需值。对我而言,我希望我的文本框和组合框的高度相同,所以 textbox.height = combobox.height
对我很管用。
注意事项:
1)这不会影响设计师,因此需要启动项目才能看到最终结果,所以可能需要一些试错。
2) 如果您希望在调整大小后正确对齐文本框和组合框,请将它们的顶部对齐,因为文本框会向下增长。
您可以设置 multiline : false
,然后只需更改文本框的文本大小,高度就会自动增加。
所以,在遇到无法调整文本框高度的问题时,虽然宽度调整正常,但是上述建议对我来说并没有解决高度调整的问题。最终,我终于找到了解决方法。如上所述,问题似乎集中在我的文本框中默认字体大小设置和文本框自动调整大小的行为上。默认字体大小非常小,因此尝试强制更改高度甚至关闭自动调整大小都无法解决我的问题。
将字体属性设置为您喜欢的大小,然后高度更改将自动围绕字体大小进行。您仍然可以手动设置文本框宽度。以下是我添加的代码片段,对我有效。
$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
你也可以更改MinimumSize