【发布时间】:2012-12-08 10:01:38
【问题描述】:
我有一个包含三个主要组件的表单:
- 设置为与客户端对齐的 FlowPanel
- 第二个 FlowPanel 设置为与底部对齐
- 设置为底部对齐的状态栏。
一切开始看起来都很棒。但是与底部对齐的 FlowPanel 也设置为 AutoSize。它包含一个可以自行折叠的面板。内部面板包含用户可以决定隐藏的摘要信息。这会将 FlowPanel 的大小减小到非常小的大小,但并未完全消失。还有一个按钮,用户可以在其中重新展开摘要面板。
当面板重新展开导致 FlowPanel 增长时,问题就出现了。那时状态栏和 FlowPanel 的顺序是相反的。它们仍然设置为底部对齐,但现在状态栏位于我的 FlowPanel 上方。
我可以在没有折叠面板的测试应用程序中复制它,只需将按钮放在表单上即可查看底部流面板的高度。如果高度增加,顺序会改变。如果它减少,那么一切都保持相同的顺序。我的测试表单中唯一的代码是:
FlowPanel2.Height := FlowPanel2.Height * 2;
我还使用普通的 TPanel 而不是 FlowPanel 的底部面板对此进行了测试,结果相同。
关于为什么会发生这种情况以及如何预防的任何想法?
【问题讨论】:
-
对齐和自动调整大小交互的一个众所周知且令人讨厌的怪癖。添加一个 OnResize 事件处理程序,在其中您将状态栏的顶部设置为容器的高度 + 1,或者它应该跟随的面板的顶部 + 高度。 (看着 LOLCats,所以是评论而不是答案)。
-
@Mark:嘿,你已经我的帽子了! :-P
标签: delphi delphi-2007 vcl