【问题标题】:FireMonkey FlowLayout isn't refreshing items based on visible propertyFireMonkey FlowLayout 不刷新基于可见属性的项目
【发布时间】:2020-10-19 17:58:56
【问题描述】:

你好吗?希望你做得很好。 我的问题:我有一个 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;

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

【问题讨论】:

  • 请显示您尝试过的内容(注释掉的行很好)。例如,您究竟想重绘什么?

标签: delphi firemonkey


【解决方案1】:

您必须使用一对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;

【讨论】:

  • 非常感谢汤姆。我尝试了很多方法来更新视觉效果,但都没有奏效。我真的很感激。
猜你喜欢
  • 2017-06-23
  • 2019-08-05
  • 1970-01-01
  • 2016-07-05
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
相关资源
最近更新 更多