首次使用TListView和TTreeView不会显示数据

时间:2014-08-21 23:56:13

标签: delphi firemonkey delphi-xe6

我的应用程序中只有一个表单,我在其中插入一个相应的用户操作框架。

此表单插入到TScrollBox中,因为它有时的宽度大于屏幕/窗口。

我在框架上有一个或多个TListViews,还有很多TEdits。

运行应用程序并打开任何帧时,不会填写一个或多个TListView。通过调试,我看到数据是从SQL中提取的。填写了TEdits。移动SQL游标会相应地更新所有TEdits。

关闭此框架并再次打开(或任何其他框架)然后它开始在TListView上显示数据。

我没有找到任何有意义的相关性。显然缺少某种初始化。并非所有的TListView都是空的,在某些帧中我有4个或5个,它显示2个数据,其他都是空的。

编辑:我已经更改了这个问题的标题,因为我注意到这个问题似乎与LiveBindings无关,但似乎与其他列表上的TListView的某种初始化有关。

我做了一个新的测试,看到TTreeView也遇到了同样的问题,只是第一次显示完全无序的数据。如果我之前打开其他东西它可以正常工作,如果我关闭并用TTreeview打开框架第二次就可以了。

在这张图片中,我展示了TreeView混乱:

enter image description here

它不应该包含所有空格,并且某些节点是重叠的。

1 个答案:

答案 0 :(得分:0)

我的应用程序只有一个表单,所有内容都是作为TScrollBox的父目录创建的帧。

使用Delphi XE5时,TScrollBox的问题很多,我不得不升级到XE6。

许多事情都开始使用XE6,但是TScrollBox仍然存在一些问题:

在插入帧并将其作为滚动的父级后,需要调用ApplyStyleLookup进行初始化。这使得TListView和TTreeView从第一次起就可以正常工作。

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

  Align := TAlignLayout.Left;

  Parent := AOwner as TFmxObject;

  if (AOwner is TScrollBox) then
    (AOwner as TScrollBox).ApplyStyleLookup;
end;

这是我的框架构造函数。这解决了所有问题。