使文本框和标签文本对齐

7
我正在设计一个用户界面,但我发现自己很纠结:如何对齐并排的文本框和标签文本。
在设计模式下,这很容易,您可以用鼠标移动其中一个,紫色线条出现,就完成了对齐。但我的是代码生成的,那么我该如何对其内容进行对齐呢?
谢谢! 编辑:布局不是我能使用的东西(我不能决定,是老板规定的)。

我很好奇“无布局规则”的原因。 - Ksempac
我们使用 Dock 和 Anchors 属性。这是一个相当大的应用程序,布局会占用更多的内存/CPU 等资源。因此,我们使用 Anchor 和 Dock,它们对我们来说已经足够了。 - Clement Herreman
3个回答

15

我喜欢使用FlowLayoutPanel(而不是TableLayoutPanel)来实现这个目的,因为你不需要操作列。请记住去除每个控件的顶部和底部锚点以使它们在垂直方向上居中,并设置FlowLayoutControl.AutoSize = true和AutoSizeMode = GrowAndShrink。

编辑:关于您对“布局是我不能使用”的限制:因此,您想在运行时通过编程方式访问紫色文本基线捕捉线位置吗?这是可能的,但速度不够快,因为只有控件的设计者知道它在哪里,所以您将不得不为您需要的所有控件创建设计器。

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


2
2个问题:1.流式布局是否只是垂直居中控件?这并不一定意味着文本基线对齐(至少通常情况下不是,对于文本框和标签可能足够)。2.如果流式布局确实对齐文本基线,并且设计师是唯一知道基线的人,那么流式布局如何提供比使用设计师更快的实现? - chiccodoro
@chiccodoro:你说得没错,基线不一定会对齐,我同意这很糟糕。但是我认为这比我知道的其他选项要好一些。 - Roman Starkov
@romkyns:在某种程度上你是正确的 :-) 实际上,在我的情况下,垂直居中控件正是我所做的(我遇到了类似的问题,因此我找到了这个线程),而且它已经足够了。 - chiccodoro

4

看一下TableLayoutPanel。要使基线匹配并不是很容易,但是通过垂直居中标签并将行设置为AutoSize,您将得到一个有序且灵活的东西。


说真的,与你放在TableLayout上的内容相比,它的“成本”总是微不足道的,所以这种推理似乎是有缺陷的。 - H H

1

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

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

我已经找到了这个解决方案,但是我们正在使用AppStyling,它定义了文字大小等。如果设计发生变化,我将不得不更改填充。 - Clement Herreman
3
将这两个控件的顶部对齐,因为它看起来很丑。 - H H
@Henk Holterman:没有布局-这永远不会漂亮。 - Matt Jacobsen
@Matt 我们正在使用Infragistics Winform控件,你可以在应用程序开始运行时指定一个样式来修改你的图形控件的外观属性。 - Clement Herreman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接