Delphi 如何防止两个对齐到底部的控件颠倒顺序?

Delphi 如何防止两个对齐到底部的控件颠倒顺序?,delphi,delphi-2007,vcl,Delphi,Delphi 2007,Vcl,我有一个包含三个主要部分的表单: 设置为与客户端对齐的FlowPanel 第二个FlowPanel设置为与底部对齐 设置为与底部对齐的状态栏 一切开始看起来都很好。但与底部对齐的FlowPanel也设置为自动调整大小。它包含一个可以自行折叠的面板。内部面板包含用户可以决定隐藏的摘要信息。这会将FlowPanel的大小降低到非常小的大小,但不会完全消失。还有一个按钮,用户可以在其中重新展开摘要面板 当面板重新展开导致FlowPanel增长时,问题就会出现。此时,状态栏和流程面板的顺序颠倒。它们仍然

我有一个包含三个主要部分的表单:

  • 设置为与客户端对齐的FlowPanel
  • 第二个FlowPanel设置为与底部对齐
  • 设置为与底部对齐的状态栏
  • 一切开始看起来都很好。但与底部对齐的FlowPanel也设置为自动调整大小。它包含一个可以自行折叠的面板。内部面板包含用户可以决定隐藏的摘要信息。这会将FlowPanel的大小降低到非常小的大小,但不会完全消失。还有一个按钮,用户可以在其中重新展开摘要面板

    当面板重新展开导致FlowPanel增长时,问题就会出现。此时,状态栏和流程面板的顺序颠倒。它们仍然设置为“底部对齐”,但现在状态栏位于我的FlowPanel上方

    我可以在一个测试应用程序中复制这一点,而无需折叠面板,只需在表单上按下按钮查看底部流面板的高度即可。如果高度增加,则顺序会改变。如果减少,则所有内容都保持相同的顺序。我的测试表单中唯一的代码是:

    FlowPanel2.Height := FlowPanel2.Height * 2;
    
    我还测试了底部面板是常规TPanel,而不是FlowPanel,结果相同

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


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

    我的解决方案:

  • 在窗体上放置状态栏并与底部对齐
  • 在窗体上放置一个面板(容器面板)并与客户端对齐
  • 将FlowPanel放置在容器面板上,并与底部对齐
  • 将FlowPanel放置在容器面板上,并与客户端对齐

  • 现在你应该不会再有任何问题了

    如果你愿意花钱,我建议你使用DevExpress'(或类似的工具)。对于简单和复杂的表单,它都是一个非常好的工具,除了解决像您遇到的问题这样的棘手问题之外,它还提供了许多其他好处

    对齐和自动调整交互的一个相当著名且令人恼火的怪癖。添加一个OnResize事件处理程序,在该处理程序中,您可以将状态栏的顶部设置为容器的高度+1,或它应该跟随的面板的顶部+高度。(看着LOLCats,这是一个评论,不是回答)。@马克:嘿,你戴上我的帽子了!:-pano无需使用
    Container\u Panel
    的另一个选项是使用
    Align=alCustom
    实现自定义对齐。但是对于不支持
    alClient
    的版本,或者您只是不想为其编写任何代码,那么
    Container\u面板
    方法可以很好地工作,代价是使用额外的
    HWND
    句柄。这不是问题的答案。这充其量只是一个建议将商业组件集作为替代品的评论。(作为回答后的附加信息可以,但作为独立内容,它不是回答。)@KenWhite:我同意,我怀疑我是否应该将其作为回答发布。正如你所说,它更适合作为评论。但我还是决定发了出来,因为这是一个很好的解决老年人问题的办法,尽管这不是对他的问题的回答。@KenWhite我觉得你们主持人有时候对人有点太苛刻了。我认为,只要事情不失控,你就应该接受一些“不太完美”的评论或回答,而不必马上发表纠正性的评论。适度是一件好事,总的来说,我认为你做得很好,但是作为一个主持人/管理员的权力不应该被滥用。@Elling:谢谢你的评论。首先,我不是主持人;我只是一个SO的用户。第二,我没有在这里设置网站指南;它们在常见问题解答和Meta上的帖子中有详细说明。第三,下面的方框标题为“您的答案”,应用于回答所问问题。如果有关于备选方案的建议,则应将其作为对原始问题的评论或作为备选方案添加到问题答案中。:-)这里有保持事物干净整洁的指导方针。(投票,无论是上台还是下台,都是SO运作的一部分。)@KenWhite是的,正如我所说,温和是好的。但作为一名主持人,你应该努力在告知人们规则的积极影响和阻止人们做出进一步贡献的消极影响之间找到平衡。