我的应用程序中只有一个表单,我在其中插入一个相应的用户操作框架。
此表单插入到TScrollBox中,因为它有时的宽度大于屏幕/窗口。
我在框架上有一个或多个TListViews,还有很多TEdits。
运行应用程序并打开任何帧时,不会填写一个或多个TListView。通过调试,我看到数据是从SQL中提取的。填写了TEdits。移动SQL游标会相应地更新所有TEdits。
关闭此框架并再次打开(或任何其他框架)然后它开始在TListView上显示数据。
我没有找到任何有意义的相关性。显然缺少某种初始化。并非所有的TListView都是空的,在某些帧中我有4个或5个,它显示2个数据,其他都是空的。
编辑:我已经更改了这个问题的标题,因为我注意到这个问题似乎与LiveBindings无关,但似乎与其他列表上的TListView的某种初始化有关。我做了一个新的测试,看到TTreeView也遇到了同样的问题,只是第一次显示完全无序的数据。如果我之前打开其他东西它可以正常工作,如果我关闭并用TTreeview打开框架第二次就可以了。
在这张图片中,我展示了TreeView混乱:
它不应该包含所有空格,并且某些节点是重叠的。
答案 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;
这是我的框架构造函数。这解决了所有问题。