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

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

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

谢谢!

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

【问题讨论】:

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

标签: c# .net layout alignment


【解决方案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 属性的样式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 2020-03-12
  • 2017-04-08
  • 2018-10-13
  • 2013-02-23
  • 1970-01-01
相关资源
最近更新 更多