常用下列语法为Treeview携带参数:
TreeView1.Items.AddChildObject(Node,'aaaa', Pointer(1));
TreeView1.Items.AddChildObject(Node,'bbbb', Pointer(3));
TreeView1.Items.AddChildObject(Node,'cccc', Pointer(19));用下列语法为Treeview提取参数:
n:=Integer(TreeView1.selected.data);//(1 3 19)问题:
1 在 TreeView1.itmes.clear时 需要释放DATA吗?
2 一般情况下,我用data简单的携带数据的id,我用当前方式可以携带strings吗?
TreeView1.Items.AddChildObject(Node,'aaaa', Pointer(1));
TreeView1.Items.AddChildObject(Node,'bbbb', Pointer(3));
TreeView1.Items.AddChildObject(Node,'cccc', Pointer(19));用下列语法为Treeview提取参数:
n:=Integer(TreeView1.selected.data);//(1 3 19)问题:
1 在 TreeView1.itmes.clear时 需要释放DATA吗?
2 一般情况下,我用data简单的携带数据的id,我用当前方式可以携带strings吗?
如果要带string的话,就要注意声明周期,特别是局部变量,本过程结束后,就over了,有可能访问出错
放strings没问题的,对象、指针都可以放,不过要考虑生存期问题
如: g_Data: array [0..N] of StructData;
Node.data := @g_Data[i];
这样clear后就不用释放了
TreeView不会释放Data指针指向的对象.//Form1代码
var
p3: Pointer;
d: TStrings;
begin
Form2 := TForm2.Create(self);
Form2.ShowModal;
p3 := Form2.p;
FreeAndNil(Form2); d := TStringList(p3);
ShowMessage(d.Strings[2]);
end;//Form2代码
//增加节点
var
a: TStrings;
begin
a := TStringList.Create;
a.Add('1'); a.Add('2'); a.Add('3');
p := Pointer(a);
TreeView1.Items.AddChildObject(nil, '123', p);
end;
//测试节点
var
b: TStrings;
node: TTreeNode;
p2: Pointer;
begin
p2 := TreeView1.Selected.Data;
b := TStringList(p2);
ShowMessage(b.Strings[2]);
end;