如何防止两个底部对齐的控件反转顺序?

7

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

  1. 一个FlowPanel,设置为Align to Client
  2. 第二个FlowPanel,设置为Align to Bottom
  3. 一个StatusBar,设置为Align to Bottom。

一切都开始看起来很好。但是,对齐到底部的FlowPanel也设置为AutoSize。它包含一个可以自行折叠的面板。内部面板包含用户可以决定隐藏的摘要信息。这会将FlowPanel的大小降低到非常小的尺寸,但不完全消失。仍然有一个按钮,用户可以重新展开摘要面板。

问题出现在面板重新展开时,导致FlowPanel增长。此时,状态栏和FlowPanel的顺序被颠倒了。它们仍然都设置为对齐底部,但现在状态栏在我的FlowPanel上面。

我可以在测试应用程序中复制此问题,而无需折叠面板,只需在表单上放置一个按钮以查看底部流程面板的高度。如果高度增加,则顺序会改变。如果减少,则一切保持原样。我的测试表单中唯一的代码是:

FlowPanel2.Height := FlowPanel2.Height * 2;

我也测试了使用普通的TPanel作为底部面板,而不是FlowPanel,结果相同。

有什么想法可以解决这个问题并防止它发生吗?

移动状态栏图像


5
对于对齐和自适应大小交互的一个相当知名且令人烦恼的怪癖。添加OnResize事件处理程序,在其中将状态栏的顶部设置为容器的高度+1,或者是它应该跟随的面板的top+height。(正在查看LOLCats,所以这只是一条注释而非答案)。 - Marjan Venema
@Mark:嘿,你戴上了我的帽子!:-P - Uli Gerhardt
3个回答

8

我有时也会遇到这种情况。我的解决方法是将应该在底部的控件的顶部设置为“足够大”的值 - 像 OtherControl.Top + OtherControl.Height + 1 这样的值应该可以工作,甚至可以使用 MaxInt(如果我没记错的话)。


8

我的解决方案:

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

现在您不应该再遇到任何问题了。


2
另一个消除 Container_Panel 需求的选项是使用 Align=alCustom 实现自定义对齐。但是对于不支持 alClient 的版本,或者您只是不想为其编写任何代码,则 Container_Panel 方法可以正常工作,但需要使用额外的 HWND 句柄。 - Remy Lebeau

0
如果您愿意花一些钱,我建议使用DevExpress的ExpreeLayoutControl(或类似工具)。它是一个适用于简单和复杂表单的优秀工具,除了解决您遇到的问题之外,还提供了许多其他好处。

1
这不是对问题的回答。最多只能作为一条评论,建议使用商业组件集作为替代方案。(如果作为回答后面的附加信息,那么它是可以接受的,但是作为独立内容,它并不是一个答案。) - Ken White
@KenWhite 我认为你们这些版主有时候对人们太苛刻了。只要事情不失控,你应该接受一些“不完美”的评论或回答,而不感到立即需要发布纠正性评论。适度的管理是好事,总体来说我认为你们做得很好,但作为版主/管理员的权力不应被滥用。 - bjaastad_e
@Elling:感谢您的评论。首先,我不是版主;我只是SO的用户。其次,我不制定网站指南;它们在FAQ和Meta上的帖子中有详细说明。第三,下面的框标题为“您的答案”,应用于回答所提出的问题。如果有替代建议,应将其作为对原始问题的评论或添加为回答问题的附加选项。 :-) 指南存在是为了保持这里的整洁和简洁。(投票,赞成或反对,是SO运作的一部分。) - Ken White
@KenWhite 是的,正如我所说,适度的管理是好的。但作为一名管理员,您应该努力在告知人们规则的积极影响和阻止人们继续贡献之间找到平衡点。 - bjaastad_e
@Elling:我拥有这些特权是通过赚取它们,花时间在这里回答问题,改进帖子,投票支持好的问题和答案,投票反对不好的问题,有时甚至会投票关闭它们。声望是通过获得投票和参与这里而赚取的。也许有一天你也能赚到足够的声望来做同样的事情。顺便说一下,我投票的问题中有70%是支持的。请阅读FAQMeta以了解这个网站的运作方式,并花更多时间在这里积累经验,然后再给那些已经在这里的人提建议。 :-) - Ken White
显示剩余4条评论

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