C#WinForms TextBox的垂直对齐等

时间:2010-04-16 13:13:02

标签: c# winforms alignment

我正在开发一个更新其WinForms应用程序UI的项目,以便与大小更加一致。默认情况下,TextBox和ComboBox控件具有不同的高度,即使使用相同的字体也是如此。我已经能够通过关闭AutoSize来调整文本框的大小,但文本仍然拥抱控件的顶部,在下面留下空隙。

有没有办法在控件中垂直居中?

5 个答案:

答案 0 :(得分:7)

如果您关闭控件上的AutoSize,则该Label必须为TextBox,因为AutoSize没有Label属性。 textBox1.Left = 0;的TextAlign属性属于ContentAligment类型,因此您可以设置水平和垂直对齐。

出于各种无聊的原因,Windows中的TextBox会自动调整其高度以适应所使用的字体。要控制文本的高度和垂直居中,您可以快速创建一个自定义UserControl,您可以用它替换所有文本框。

在用户控件上,将BorderStyle设置为Fixed3D,将BackColor设置为System.Window。添加TextBox并将其BorderStyle设置为None。在控件的Resize事件中,添加使TextBox与用户控件的客户区域相同的宽度的代码(考虑边框像素)并左对齐它(即textBox1.Top = (this.Height - textBox1.Height) / 2;)并垂直居中(例如{ {1}})。

最后,向用户控件添加你需要的任何TextBox类型属性和事件(可能只是Text和TextChanged,我猜),并将它们连接起来,以便它们传递到控件内的TextBox,如下所示:

public string Text
{
    get
    {
        return textBox1.Text;
    }
    set
    {
        textBox1.Text = value;
    }
}

如果您希望对此更加高兴,您甚至可以将用户控件的TextAlign属性替换为实际类型为ContentAlignment的属性(如Label),然后将内部TextBox对齐以匹配。

这种方法适用于ComboBox,虽然看起来有些奇怪。使用ComboBox,将其FlatStyle属性设置为Flat - 否则您将像TextBox一样处理它。它看起来很奇怪,因为下拉箭头框不会完全位于面板的顶部和底部。

答案 1 :(得分:1)

有点晚了,但这里答案很简单。

创建一个空控件并将您的文本框包含为子项,然后在父控件或文本框调整大小时将文本框控件垂直重新对齐

删除边框,使bk与父级(默认)

的颜色相同

哦,覆盖字体以设置文本框字体,我认为你有自己的valign文本框。

答案 2 :(得分:0)

一个非常简单的解决方案是使用Datagridview,其中1列,1行,列和行标题不可见,并设置DefaultCellStyle.Alignment = MiddleLeft。

并禁用添加/删除行,并且您有一个完全对齐文本的文本框。

答案 3 :(得分:0)

您可以简单地调整填充 - 垂直更高。类别布局中的属性。

答案 4 :(得分:0)

您是否尝试过TableLayoutPanel解决方案来提供垂直对齐?然后,您可以根据需要动态调整事件的高度,也可以使用固定值,也可以使用TableLayoutPanel行自动调整大小功能

来调整高度。

只需添加一个TableLayoutPanel即可包含TextBoxTableLayoutContainer有1列和3行。 TextBox必须放在第二行。第一行和最后一行设置为50%的高度(它们实际上仅使用“剩余高度”)。将TextBox放置在第二行之后,可以将该行设置为您选择的绝对值或“自动调整大小”。

TableLayoutPanel具有自己的宽度和高度控制。但是,如果您将此TableLayoutPanel放置在另一个TableLayoutPanel的单元格中,只需记住将新TableLayoutPanel的属性Auto-size设置为true,以便可以将其自身调整为大小的细胞。

通常,TableLayoutPanels对您的设计有很大帮助,我绝对建议您使用它们。

enter image description here