【问题标题】:How do I prevent two align to bottom controls from reversing order?如何防止两个对齐底部控件颠倒顺序?
【发布时间】:2012-12-08 10:01:38
【问题描述】:

我有一个包含三个主要组件的表单:

  1. 设置为与客户端对齐的 FlowPanel
  2. 第二个 FlowPanel 设置为与底部对齐
  3. 设置为底部对齐的状态栏。

一切开始看起来都很棒。但是与底部对齐的 FlowPanel 也设置为 AutoSize。它包含一个可以自行折叠的面板。内部面板包含用户可以决定隐藏的摘要信息。这会将 FlowPanel 的大小减小到非常小的大小,但并未完全消失。还有一个按钮,用户可以在其中重新展开摘要面板。

当面板重新展开导致 FlowPanel 增长时,问题就出现了。那时状态栏和 FlowPanel 的顺序是相反的。它们仍然设置为底部对齐,但现在状态栏位于我的 FlowPanel 上方。

我可以在没有折叠面板的测试应用程序中复制它,只需将按钮放在表单上即可查看底部流面板的高度。如果高度增加,顺序会改变。如果它减少,那么一切都保持相同的顺序。我的测试表单中唯一的代码是:

FlowPanel2.Height := FlowPanel2.Height * 2;

我还使用普通的 TPanel 而不是 FlowPanel 的底部面板对此进行了测试,结果相同。

关于为什么会发生这种情况以及如何预防的任何想法?

【问题讨论】:

  • 对齐和自动调整大小交互的一个众所周知且令人讨厌的怪癖。添加一个 OnResize 事件处理程序,在其中您将状态栏的顶部设置为容器的高度 + 1,或者它应该跟随的面板的顶部 + 高度。 (看着 LOLCats,所以是评论而不是答案)。
  • @Mark:嘿,你已经我的帽子了! :-P

标签: delphi delphi-2007 vcl


【解决方案1】:

我的解决方案:

  1. 在表单上放置一个状态栏并与底部对齐
  2. 在窗体上放置一个面板 (Container_Panel) 并与客户端对齐
  3. 在 Container_Panel 上放置 FlowPanel 并与底部对齐
  4. 在 Container_Panel 上放置 FlowPanel 并与客户端对齐

现在你应该没有问题了

【讨论】:

  • 另一个不需要Container_Panel 的选项是使用Align=alCustom 来实现自定义对齐。但是对于不支持alClient 的版本,或者您只是不想为其编写任何代码,那么Container_Panel 方法可以正常工作,但代价是使用额外的HWND 句柄。
【解决方案2】:

我有时也有这个。我的解决方案是将位于底部的控件的顶部设置为“足够大”的值——OtherControl.Top + OtherControl.Height + 1 之类的东西应该可以工作,甚至MaxInt IIRC。

【讨论】:

    【解决方案3】:

    如果你愿意花一些钱,我建议使用 DevExpress'ExpreeLayoutControl(或类似的东西)。对于简单和复杂的表单来说,它都是一个出色的工具,除了解决您遇到的问题等麻烦的怪癖之外,它还提供了许多其他好处。

    【讨论】:

    • -1。这不是问题的答案。充其量只是建议将商业组件集作为替代方案的评论。 (在您回答之后作为附加信息会很好,但作为独立内容它不是答案。)
    • @KenWhite:我同意,我怀疑是否应该将其发布为答案。正如您所说,它更适合作为评论。但我还是决定把它全部发布出来,因为它是 Mark Elders 的 问题 的一个很好的解决方案,即使它不是他 question 的答案。
    • @KenWhite 我认为你们版主有时对人有点太苛刻了。我认为,只要事情没有失控,您就应该接受一些“不够完美”的 cmets 或答案,而无需立即发布纠正 cmets。适度是一件好事,总的来说,我认为你做得很好,但作为版主/管理员的权力不应该被滥用。
    • @Elling:感谢您的 cmets。首先,我不是版主;我只是SO的用户。其次,我不在这里设置站点指南;它们在常见问题解答和 Meta 上的帖子中都有说明。第三,下面的方框标题为“您的答案”,应该用于回答所提问题。如果有替代建议,则应将其作为原始问题的 cmets 或作为替代添加到问题的答案。 :-) 存在准则来保持这里的东西干净整洁。 (投票,向上向下,是 SO 操作的一部分。)
    • @KenWhite 是的,正如我所说,适度是好的。但作为版主,您应该努力在向人们告知规则的积极影响和阻止人们做出进一步贡献的消极影响之间找到平衡。
    猜你喜欢
    • 1970-01-01
    • 2022-11-16
    • 2021-06-10
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多