对齐文本框和标签文本

Posted

技术标签:

【中文标题】对齐文本框和标签文本【英文标题】:Align TextBox and Label text 【发布时间】:2010-11-13 07:23:34 【问题描述】:

我正在设计一个 UI,我发现自己很头疼:如何对齐 TextBox 文本和标签文本,它们并排排列。

在设计模式下,很简单,你用鼠标移动一个,就会出现一条紫色的线,瞧!对齐很好,但我的是代码生成的,那么我该如何对齐它们的内容呢?

谢谢!

编辑 : 布局是我不能使用的(我不制定规则,我的老板做..)

【问题讨论】:

我很想知道“无布局规则”的原因 我们使用 Dock 和 Anchors 属性。这是一个相当大的应用程序,布局使用更多的内存/CPU/等。所以我们使用 Anchor 和 Dock,这对我们来说已经足够了。 【参考方案1】:

我喜欢为此使用FlowLayoutPanel(而不是TableLayoutPanel),因为您不需要摆弄列。 记住要删除每个控件上的 Top 和 Bottom 锚点,使它们垂直居中,并设置 FlowLayoutControl.AutoSize = true 和 AutoSizeMode = GrowAndShrink。

编辑:关于您对“布局是我不能使用的东西”的限制:所以您想在运行时以编程方式访问紫色文本基线对齐线位置?这是可能的,但它不可能比布局更快,因为只有控件的设计器知道它在哪里,所以你必须为你需要的所有控件创建设计器。

This question 有一些代码可以作为起点,但正如我所说,考虑到性能限制,这可能不是正确的方法。

【讨论】:

2 问: 1. 流式布局不是简单地垂直居中控件吗?这并不一定意味着文本基线是对齐的(至少通常不是,它可能足以用于文本框和标签)。 2. 如果流布局确实对齐文本基线,并且设计者是唯一知道基线的人,那么流布局如何提供比使用设计器更快的实现? @chiccodoro:你是对的,基线不一定是对齐的,我同意这很糟糕。它只是比我知道的任何其他选择都少。 @romkyns:反过来你是对的 :-) 实际上垂直居中控件现在正是我在我的情况下所做的(有类似的问题,因此我找到了这个线程),并且够了【参考方案2】:

看看 TableLayoutPanel。获得基线匹配仍然不是那么容易,但是通过将标签垂直居中并将行设置为 AutoSize,您将获得有序且灵活的东西。

【讨论】:

说真的,与你放在它上面的东西相比,TableLayout 的“成本”总是很小,所以推理似乎有缺陷。【参考方案3】:

然后使用每个控件(继承自 Control)的 X、Y、Width、Height 属性。

int padding = 5;
textbox.Y = label.Y;
textbox.X = label.Width + padding

【讨论】:

我已经找到了这个解决方案,但是我们正在使用 AppStyling,它定义了文本大小等。如果设计发生变化,我将不得不更改填充。 Taht 对齐两个控件的 Tops 太丑了 @Henk Holterman:没有布局 - 这永远不会漂亮。 @Matt 我们正在使用 Infragistics Winform 控件,您可以指定在应用程序开始运行时修改图形控件的 Appareance 属性的样式。

以上是关于对齐文本框和标签文本的主要内容,如果未能解决你的问题,请参考以下文章

如何垂直对齐段落中心

bootstrap5 文本文字排版类

单选框和复选框与文本的垂直居中显示问题

链接动态创建的文本框和标签

文本框和标签数组如何在 C# 中的提交方法中获取值

编写程序界面中包括一个标签、一个文本框和一个按钮。当用户单击按钮时,程序把文本框的内容复制到标签中