我正在开发一个更新其WinForms应用程序UI的项目,以便与大小更加一致。默认情况下,TextBox和ComboBox控件具有不同的高度,即使使用相同的字体也是如此。我已经能够通过关闭AutoSize来调整文本框的大小,但文本仍然拥抱控件的顶部,在下面留下空隙。
有没有办法在控件中垂直居中?
答案 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
即可包含TextBox
。 TableLayoutContainer
有1列和3行。 TextBox
必须放在第二行。第一行和最后一行设置为50%的高度(它们实际上仅使用“剩余高度”)。将TextBox
放置在第二行之后,可以将该行设置为您选择的绝对值或“自动调整大小”。
TableLayoutPanel
具有自己的宽度和高度控制。但是,如果您将此TableLayoutPanel
放置在另一个TableLayoutPanel
的单元格中,只需记住将新TableLayoutPanel
的属性Auto-size设置为true,以便可以将其自身调整为大小的细胞。
通常,TableLayoutPanels
对您的设计有很大帮助,我绝对建议您使用它们。