首页 > 解决方案 > FireMonkey FlowLayout 不刷新基于可见属性的项目

问题描述

你好吗?希望你做得很好。我的问题:我有一个 FlowLayout 里面有很多布局,我需要根据单选按钮选择隐藏一些,在设计时它工作正常我将可见属性设置为 false 并且所有其他布局重新对齐正确方式,但是当我在运行时这样做时它不起作用,它会在已隐藏的布局和下一个布局之间保持空白。当我手动调整大小(转到表单边框并稍微拖动)时,它会重新对齐并正确,但如果我选择另一个收音机,布局会恢复并覆盖另一个布局,所以我需要再次手动调整大小以重新对齐。我试图查看 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;

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

标签: delphifiremonkey

解决方案


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

例如

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

推荐阅读