对齐文本框和标签文本
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 属性的样式。以上是关于对齐文本框和标签文本的主要内容,如果未能解决你的问题,请参考以下文章