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

时间:2012-12-20 20:10:03

标签: delphi delphi-2007 vcl

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

  1. 设置为与客户端对齐的FlowPanel
  2. 第二个FlowPanel设置为Align to Bottom
  3. StatusBar设置为Align to Bottom。
  4. 一切都开始看起来很棒。但是与底部对齐的FlowPanel也设置为AutoSize。它包含一个可以自行折叠的面板。内部面板包含用户可以决定隐藏的摘要信息。这会将FlowPanel的大小降低到非常小的尺寸但不会完全消失。用户可以重新展开摘要面板的按钮。

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

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

    FlowPanel2.Height := FlowPanel2.Height * 2;
    

    我还测试了这个,底部面板是普通的TPanel,而不是具有相同结果的FlowPanel。

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

    Moving Status bar image

3 个答案:

答案 0 :(得分:8)

我有时也会这样。我的解决方案是将控件的顶部设置在底部,使其达到“足够大”的值 - 类似OtherControl.Top + OtherControl.Height + 1应该工作,甚至MaxInt IIRC。

答案 1 :(得分:8)

我的解决方案:

  1. 在表单上放置状态栏并与底部对齐
  2. 在表单上放置一个Panel(Container_Panel)并与客户端
  3. 对齐
  4. 将FlowPanel放在Container_Panel上并与底部对齐
  5. 将FlowPanel放在Container_Panel上并与客户端
  6. 对齐

    现在你应该没有问题了

答案 2 :(得分:1)

如果您愿意花一些钱,我建议您使用DevExpress'ExpreeLayoutControl(或类似的东西)。它是简单和复杂形式的优秀工具,除了解决您遇到的问题等棘手问题外,还提供了许多其他好处。