文本框等的 C# WinForms 垂直对齐

标签 c# winforms alignment

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

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

最佳答案

如果您要关闭控件上的 AutoSize,它必须是一个 Label,因为 TextBox 没有 >AutoSize 属性。 LabelTextAlign 属性属于 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/

相关文章:

c# - JavaScript - 从使用 Json.Net 创建的 JSON 对象中提取数据

c# - 从用户控件代码隐藏,在设计模式下,如何获取父控件中包含的所有控件名称?

winforms - 在 UppercuT code_drop 中包含 winforms 安装程序

html - 如何在 IE-11 中将 div 保持在页面的中心?

java - 设置 Horizo​​ntalPanel 上的对齐方式。外部总重量

c# - MVC 5下拉列表用于编辑 View 中的多选值绑定(bind)

c# - DataGridView:使用数组或 List<t> 添加新行

c# - 重新评估由标记扩展计算的 xaml 页面中的所有值

c# - 使用 ListView.Item.RemoveAt() 时不会删除指定的项目

html - 无法使 flex 显示工作