0

我想在填充后立即将数据保存在虚拟列表视图中。如果我使用 Savedialog 来保存数据,它可以工作。如果我在 ListviewOnData 事件中调用保存过程,它会提示错误“无法创建文件...”。我在这里重现我的观察。

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;

我希望在填充后立即将数据保存在列表视图(虚拟模式)中。但它会提示错误。

如何解决它。先感谢您。

新编辑:

我从 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 事件之后是什么事件?

再次感谢你。

4

1 回答 1

1

这听起来好像您没有指定绝对文件路径。然后 Windows 在保存文件时依赖于当前工作目录。保存对话框设置这个目录,所以一切正常。在您的 ListviewOnData 事件中,cwd 可能未正确设置。

于 2011-01-26T07:28:11.337 回答