我希望在填充后立即将数据保存在虚拟列表视图中。如果我使用Savedialog来保存数据,它可以工作。如果我在ListviewOnData事件中调用save过程,则会提示错误“无法创建文件...”。我在这里重现我的观察。
procedure TForm6.savefileList(AListView: TListView; sFileName: string);
begin
F:= TFileStream.Create(sFileName, fmCreate or fmOpenRead);
...
...
F.free;
end;
Procedure Tform6.SavevirtualistinSaveDialog;// A buttonClick calls this procedure
begin
If SaveDialog1.execute then
savefilelist(listview1, savedialog1.FileName);; // It works and save data in sfilename.
..
end;
procedure TForm6.ListView1Data(Sender: TObject; Item: TListItem);
begin
with ld do begin
...
...
// filling data in virtual list
end;
// Right after filling data, I call Dosavelist procedure.
Dosavelist; //error line " Can not Create file", If I annotate this line
// and call SavevirtualistinDialog in another buttonClick event,
//the data can be saved.
end;
Procedure Tform6.Dosavelist;
begin
savefilelist(listview1, extractfilepath(application.exename)+'list.tmp');
end;
我希望在填充后立即将数据保存在listview(虚拟模式)中。但它会引发错误。
如何解决它。先感谢您。
新编辑:
我从listview1data事件中删除了Dosavelist并将其放入另一个跟踪listview的函数中。有用。所以它解决了。 谢谢大家的帮助。
//My complete savefilelist para is:
savefilelist(listview1, extractfilepath(application.exename)+'list.tmp');
//In SavevirtualistinSaveDialog procedure, the complete save code line is:
savefilelist(listview1, savedialog1.FileName);
或者Dosavelist程序可能不会被称为那里?哪里?如何捕获虚拟列表视图刚刚完成填充的时刻?我不知道在ListviewData事件之后发生了什么事件?
再次感谢你。
答案 0 :(得分:1)
这听起来好像没有指定绝对文件路径。然后,Windows在保存文件时依赖于当前工作目录。保存对话框设置此目录,因此一切正常。在ListviewOnData事件中,cwd可能未正确设置。