我正在嘗試使用VirtualStringTree組件實現一個簡單的聯繫人管理器。我有它設置看起來像一個列表視圖組件只有三列,將所有包含文本:如何保存並加載我的svTree數據結構?
對於數據結構,我使用svTree由利納,這是在其他堆棧提到溢出問題。
我宣佈這樣的記錄:
type
TMainData = record
Name, Email, Password: string;
end;
在窗體的OnCreate我有這樣的:
procedure TForm1.FormCreate(Sender: TObject);
begin
MyTree := TSVTree<TMainData>.Create(False);
MyTree.VirtualTree := vst1;
end;
我從TEdits添加數據是這樣的:
procedure TForm1.BuildStructure;
var
svNode: TSVTreeNode<TMainData>;
Data: TMainData;
begin
MyTree.BeginUpdate;
try
Data.Name := edtname.Text;
Data.Email := edtEmail.Text;
Data.Password := edtPassword.Text;
svNode := MyTree.AddChild(nil, Data);
finally
MyTree.EndUpdate;
end;
Label1.Caption := 'Count: '+IntToStr(MyTree.TotalCount);
end;
如何將其保存到要加載的流或文件中?我曾嘗試使用MyTree.SaveToFile('C:/Test.dat')
和MyTree.LoadFromFile('C:/Test.dat')
,但是當它加載回來時,樹視圖中不包含任何數據,只有一個空行。
非常感謝你,我現在就開始工作,並且看到我錯過了什麼。我試圖這樣做「有點」,但是在'Stream.WriteString'部分,我使用了+運算符來將它們組合在一起!衛生署! - 我使用你的答案唯一的問題是一個不兼容的類型與:'如果分配(Node.FValue)然後',但如果我刪除這部分它將編譯和工作。我是否需要這個,或者如果省略,是否會導致更多的問題? – Shambhala
如果您已填充數據結構和/或使用記錄,則不需要此行。基本上我習慣在使用VirtualStringTree時寫這個。 – Linas
謝謝你解釋這部分,並再次爲你的幫助:) – Shambhala