首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

初级有关问题:TTreeNode.Data的值是否可以设置为一个指向类对象的指针

2012-03-05 
初级问题:TTreeNode.Data的值是否可以设置为一个指向类对象的指针?如题所述,是否可以将一个类对象设置到TT

初级问题:TTreeNode.Data的值是否可以设置为一个指向类对象的指针?
如题所述,是否可以将一个类对象设置到TTreeNode.Data上,这个我知道是可以的,但是如果将指向的类对象声明为局部变量时,在其它地方调用TTreeNode.Data时将出现空引用的现象,那么大家来说说如何才能够让TTreeNode.Data直接指向一个类对象呢,你们是怎么解决的呢?

[解决办法]
对象的变量只含有一个内存中对象的引用,把对象的变量的值赋给TTreeNode.Data,就相当于指针赋值;
TTreeNode.Data和对象的变量指向同一个内存空间;
个人认为,直接赋值就可以;对象的变量没值时,将指向空;
[解决办法]
当函数调用完的时候局部变量会被释放,但开辟的内存和创建的实例并不会自动被释放
参考如下代码:

Delphi(Pascal) code
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; //释放指针内存

希望对你有帮助,有错的地方也希望大虾指点;共同学习;

热点排行