【发布时间】:2011-08-16 17:18:00
【问题描述】:
如何更改文本框的高度?
以下都不起作用:
this.TextBox1.Size = new System.Drawing.Size(173, 100);
或
this.TextBox1.Size.Height = 100;
如果可能的话,我希望能够在不使用多行的情况下更改单行文本框的高度以适应字体大小。
【问题讨论】:
标签: c# winforms .net-3.5 textbox
如何更改文本框的高度?
以下都不起作用:
this.TextBox1.Size = new System.Drawing.Size(173, 100);
或
this.TextBox1.Size.Height = 100;
如果可能的话,我希望能够在不使用多行的情况下更改单行文本框的高度以适应字体大小。
【问题讨论】:
标签: c# winforms .net-3.5 textbox
你可以multiline : false,然后改变文本框上的文字大小,高度会自动增加
【讨论】:
最简单的方法
现在您可以随意调整 TextBox 的垂直大小了。
【讨论】:
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;
}
}
【讨论】:
因此,在遇到无法在文本框中调整高度的相同问题后,宽度调整很好,但高度从未根据上述建议进行调整(至少对我而言),我终于能够做到这一点。如上所述,问题似乎集中在我的文本框中的默认字体大小设置以及围绕它的文本框自动调整大小的行为上。默认字体大小很小。因此,为什么尝试强制高度甚至关闭自动调整大小都无法为我解决问题。
将字体属性设置为您喜欢的大小,然后高度会自动在字体大小附近发生变化。您仍然可以手动设置文本框宽度。下面是我添加的对我有用的 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 大小实际上控制着高度通过围绕该字体大小自动调整文本框。
【讨论】:
你也可以改变你也可以改变MinimumSize
【讨论】:
这对我来说很有效,因为我想做的只是设置文本框的高度。该属性是只读的,并且该属性在 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;
【讨论】:
步骤:
【讨论】:
size 值复制到 minimumSize,即使不更改字体大小也很有效。
您可以设置文本框的MinimumSize 和/或MaximumSize 属性。这不会立即影响大小,但是当您在表单设计器中调整文本框的大小时,大小将自动调整以满足最小/最大大小限制。即使Multiline 设置为false 并且不依赖于字体大小,这也有效。
【讨论】:
Margin 属性或容器控件的Padding 属性。
你们中的一些人很亲密,但是像这样更改设计器代码很烦人,因为您总是必须返回并再次更改它。
原始 OP 可能使用的是旧版本的 .net,因为版本 4 会自动调整文本框高度以适应字体,但不会将组合框和文本框的大小设置为相同,这是一个完全不同的问题,但将我吸引到这里。
这是我在表单上的组合框旁边放置文本框时遇到的问题。这有点烦人,因为谁想要两个具有不同高度的控件并排?或者不同的字体来强制高度?加紧微软,这应该很简单!
我在 VS2012 中使用 .net 框架 4,以下是对我来说最简单的解决方案。
在表单加载事件中(或在InitializeComponent 之后触发的任何地方):textbox.AutoSize = false 然后将高度设置为您想要的任何值。对我来说,我希望我的文本框和组合框的高度相同,所以 textbox.height = combobox.height 为我做到了。
注意事项:
1) 设计师不会受到影响,因此需要您启动项目才能看到最终结果,因此可能会有一些试验和错误。
2) 如果您希望组合框和文本框在调整大小后正确对齐,请对齐它们的顶部,因为文本框会向下增长。
【讨论】:
您可以将它放在与您想要的高度具有相同背景颜色的面板中。这种方式有一个优点是文本框可以水平居中,这是其他解决方案所不具备的。
您可以使用以下方法使其更自然
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 生成的代码。它仍然不一定像在自定义控件中那样干净或漂亮,但它相当简单和健壮:
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;
}
}
}
【讨论】:
刚刚发现了一个为文本框设置自定义高度的小技巧。
在设计器视图中,将minimumSize 设置为您想要的任何值,然后完全删除size 设置。这将导致设计师使用新的最低设置进行更新!
【讨论】:
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;
}
}
【讨论】:
进入你的Form.Designer.cs 向下滚动到您的文本框。下面的示例适用于 textBox2 对象。 添加这个
this.textBox2.AutoSize = false;
并将其大小设置为您想要的任何大小
this.textBox2.Size = new System.Drawing.Size(142, 27);
将像魅力一样工作 - 无需将 multiline 设置为 true,但仅在您更改设计器本身的任何选项之前(您必须再次设置这 2 行)。 我认为,这种方法仍然比 multilining 更好。我的应用程序中有一个昵称文本框,并且使用多行时,人们有时会不小心写了两次他们的名字,例如 Thomas\nThomas(您在实际的文本框行中只看到一个)。使用这个解决方案,文本只是简单地隐藏在每个字符太长而不是宽度之后的左侧,因此对于用户来说输入输入更加安全。
【讨论】:
对我来说,最好的办法是去掉文本框的边框,把它放在一个面板里面,可以随意定制。
【讨论】:
设置最小尺寸属性
tb_01.MinimumSize = new Size(500, 300);
这对我有用。
【讨论】:
可能有点晚了。但你可以这样做。
txtFoo.Multiline = true;
txtFoo.MinimumSize = new Size(someWith,someHeight);
我就是这样解决的。
【讨论】:
试试下面的:)
textBox1.Multiline = true;
textBox1.Height = 100;
textBox1.Width = 173;
【讨论】:
我认为这应该可行。
TextBox1.Height = 100;
【讨论】:
有两种方法可以做到这一点:
我相信这是唯一的方法;较大的字体大小应自动适应文本框
【讨论】:
AutoSize = false 的答案然后设置尺寸是正确的答案。