C#WinForms TextBox的垂直对齐等

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

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

如果您在AutoSize上关闭AutoSize ,它必须是Label ,因为TextBox没有AutoSize属性。 Label的TextAlign属性是ContentAligment类型,因此您可以设置水平和垂直对齐。

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

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

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

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

如果你想用它来超级想象,你甚至可以将用户控件的TextAlign属性替换为实际为ContentAlignment类型的属性(如Label),然后将内部TextBox对齐以匹配。

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

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

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

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

哦,覆盖字体来设置文本框字体,我认为你有valign文本框。

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

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

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