生成treeView的代码:
while not Eof do
begin
new(pnode);
pnode.id:=fieldbyname('ID').AsInteger;
Pnode.caption:=fieldbyname('Caption').AsString;
node:=Treeview1.Items.AddChildObject(parentNode,pnode.caption,pnode); //目录页
FillTreeView(fieldbyname('ID').AsInteger,node);//递归调用
Next;
end;
================
以上代码没有dispose(pnode),点击节点时可以正常获得ID在语句 FillTreeView(fieldbyname('ID').AsInteger,node);//递归调用
前面加上Dispose(Pnode);点击节点时,获得的ID不正确,是个很长的整数。请教:如果不使用dispose,系统在什么时候释放new的pnode呢?不使用dispose安全吗?
while not Eof do
begin
new(pnode);
pnode.id:=fieldbyname('ID').AsInteger;
Pnode.caption:=fieldbyname('Caption').AsString;
node:=Treeview1.Items.AddChildObject(parentNode,pnode.caption,pnode); //目录页
FillTreeView(fieldbyname('ID').AsInteger,node);//递归调用
Next;
end;
================
以上代码没有dispose(pnode),点击节点时可以正常获得ID在语句 FillTreeView(fieldbyname('ID').AsInteger,node);//递归调用
前面加上Dispose(Pnode);点击节点时,获得的ID不正确,是个很长的整数。请教:如果不使用dispose,系统在什么时候释放new的pnode呢?不使用dispose安全吗?
//TTreeNodes由TTreeNode管理,就像Items由Item管理一样,可以设置 OwnsObjects属性为True
//让TTreeNode自动管理其成员对象的生命期。//声明
var
newnode: TTreeNodes;//用重载的方法创建
newnode:= TTreeNodes.Create(true);
在每次重建 Tree 的时候,释放这个 tree 的时候,遍历下节点再释放.
遍历或者循环释放的话,需要使用Dispose(Pnode);PNODE参数是指针类型的变量,那么如何获得这个Pnode呢?