我正在开发一个项目,更新他们的 WinForms 应用程序用户界面,使其与尺寸更加一致。默认情况下,TextBox 和 ComboBox 控件具有不同的高度,即使使用相同的字体也是如此。我已经能够通过关闭 AutoSize 来调整文本框的大小,但文本仍然紧贴控件的顶部,在下方留下一个空隙。
有没有办法让控件中的文本垂直居中?
最佳答案
如果您要关闭控件上的 AutoSize
,它必须是一个 Label
,因为 TextBox
没有 >AutoSize
属性。 Label
的 TextAlign
属性属于 ContentAligment
类型,因此您可以同时设置水平和垂直对齐方式。
出于各种无聊的原因,Windows 中的 TextBoxes
旨在根据所使用的字体自动调整其高度。要控制文本的高度和垂直居中,您可以快速创建一个自定义 UserControl
,您可以使用它来替换所有的 TextBoxes
。
在您的 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 => textBox1.Text;
set => textBox1.Text = value;
}
如果你想 super 喜欢这个,你甚至可以将用户控件的 TextAlign
属性替换为实际类型为 ContentAlignment
的属性(如 Label)然后对齐内部 TextBox
以匹配。
同样的方法适用于 ComboBox
,尽管它看起来有点奇怪。对于 ComboBox
,您可以将其 FlatStyle
属性设置为 Flat - 否则您可以像处理 TextBox
一样处理它。这看起来会很奇怪,因为下拉箭头框不会完全位于面板的顶部和底部。
关于文本框等的 C# WinForms 垂直对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2653153/