FireMonkey FlowLayout 没有根据可见的内容刷新项目 属性

FireMonkey FlowLayout isn't refreshing items based on visible property

你好吗?希望你过得很好。 我的问题:我有一个 FlowLayout 里面有很多布局,我需要根据单选按钮 selection 隐藏一些布局,在设计时它工作正常我将可见 属性 设置为false 和所有其他布局以正确的方式重新对齐,但是当我在运行时这样做时它不起作用,它在已隐藏的布局和下一个布局之间保持白色间隙。当我手动调整大小时(转到表单边框并拖动一点)它会重新对齐并变得正确,但是如果我 select 另一个收音机布局返回并且它覆盖另一个布局所以我需要再次手动调整大小以重新调整。我试图查看 Resize 的源代码,但没有得到任何相关信息。我尝试了什么:重绘、重新对齐、InvalidateRect、RecalcAbsolute。有什么办法可以强制刷新组件吗?

procedure
    TFrmApontamentoProducaoOrdemProducao.rbOrdensProducaoQuantidadeParcialClick(
    Sender: TObject);
begin
  if not lytQuantidadeParcial.Visible then
    lytQuantidadeParcial.Visible := True;
  // Tried to realign here
end;

procedure
    TFrmApontamentoProducaoOrdemProducao.rbOrdensProducaoQuantidadeTotalClick(
    Sender: TObject);
begin
  if lytQuantidadeParcial.Visible then
    lytQuantidadeParcial.Visible := False;
  // Tried to realign here
end;

这是一个简单的代码,但它给我带来了一点问题。感谢您的帮助,如果您需要更多代码或更多详细信息,请告诉我。

您必须用一对 FlowLayout1.BeginUpdate;FlowLayout1.EndUpdate; 包围更改 TFlowLayout 布局的代码,以确保更新计数器保持同步,您应该也使用 try..finally..end 块。

例如

procedure TForm21.Button6Click(Sender: TObject);
begin
  FlowLayout1.BeginUpdate;
  try
    Layout3.Visible := not Layout3.Visible;
  finally
    FlowLayout1.EndUpdate;
  end;
end;