初级问题:TTreeNode.Data的值是否可以设置为一个指向类对象的指针?
如题所述,是否可以将一个类对象设置到TTreeNode.Data上,这个我知道是可以的,但是如果将指向的类对象声明为局部变量时,在其它地方调用TTreeNode.Data时将出现空引用的现象,那么大家来说说如何才能够让TTreeNode.Data直接指向一个类对象呢,你们是怎么解决的呢?
[解决办法]
对象的变量只含有一个内存中对象的引用,把对象的变量的值赋给TTreeNode.Data,就相当于指针赋值;
TTreeNode.Data和对象的变量指向同一个内存空间;
个人认为,直接赋值就可以;对象的变量没值时,将指向空;
[解决办法]
当函数调用完的时候局部变量会被释放,但开辟的内存和创建的实例并不会自动被释放
参考如下代码:
function AddNode(ATreeView: TTreeView): TTreeNode;var vForm: TForm;begin Result := ATreeView.Items.Add(nil, '测试'); vForm := TForm.Create(nil); vForm.Caption := 'Zswang 路过'; Result.Data := vForm;end;procedure TForm1.Button1Click(Sender: TObject);var vTreeNode: TTreeNode;begin vTreeNode := AddNode(TreeView1); TForm(vTreeNode.Data).Show;end;
[解决办法]
//对象就是指针,直接写行
procedure aa(s: TObject);
begin
TreeView1.Items[0].Data:=s;
end;
[解决办法]
局部指针变量开辟空间后,空间不会自动释放;
new(cp_Arr[i]); //申请空间
cp_Arr[i]^:= adoquery1.fieldbyname('cpbh').value;
cur_node:=TreeView1.Items.addchild(root_node,cp_Arr[i]^); //产品生成树
cur_node.data:=cp_Arr[i]; //指针赋值
这里的cp_Arr[i]指针变量是局部,退出过程会释放cp_Arr[i],但空间还在,就是cur_node.data所指;
这个申请空间的空间后面由,TreeView1.Free释放;
TreeView1.Free; //释放指针内存
希望对你有帮助,有错的地方也希望大虾指点;共同学习;