You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表单ClientHeight与Height未随MyPanel隐藏更新的替代方案问询

Delphi表单创建时隐藏控件后自动调整高度的解决方案

在构造函数中隐藏MyPanel后,表单的AutoSize机制不会自动重新计算尺寸,导致ClientHeight仍包含已隐藏控件的高度。无需切换表单Visible属性,可通过以下方式强制更新尺寸:

方法:手动触发布局重计算

在设置MyPanel.Visible := False后,调用父控件的Realign方法和表单的AdjustSize方法,强制重新计算布局与尺寸:

constructor MyForm.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);

  TopPanel.Align := alTop; // parented to MainPanel
  MyPanel.Align := alTop; // parented to MainPanel

  MainPanel.AutoSize := True;
  AutoSize := True;

  if foo then
  begin
    MyPanel.Visible := False;

    // 强制MainPanel重新排列子控件并计算自身尺寸
    MainPanel.Realign;
    // 强制表单基于更新后的内容重新计算整体尺寸
    Self.AdjustSize;
  end;
end;

原理说明

  • Realign:触发MainPanel重新处理子控件的对齐规则,结合AutoSize属性重新计算自身的最优尺寸,忽略已隐藏的MyPanel。
  • AdjustSize:强制表单基于其内部控件(已更新的MainPanel)的尺寸,重新计算自身的ClientHeight和Height,确保数值准确。

这样在表单创建阶段就能得到正确的ClientHeight,无需依赖切换可见性的临时手段。

内容的提问来源于stack exchange,提问作者cab327

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 19:18:21