我用过data属性,在treeview1添加TreeNode时,把Data属性指向一个字符串是可以的。但在OnChange事件想访问时出错Procedure Tf_main.CodeRecursion(parent:Ttreenode;GoodsCode:String); var Node:TtreeNode; Scode:string; begin while not (qgoods.eof()) do begin if not (qGoods.FieldByName('goodstype').AsString='原材料') then begin Node:=Treeview1.Items.Addchild(Parent, qGoods.fieldbyname('GoodsName').AsString); Scode:=qGoods.fieldbyname('goodscode').AsString; Node.Data:=@Scode; end;//if end; //while endprocedure Tf_main.TreeView1Change(Sender: TObject; Node: TTreeNode); begin Showmessage(pstring(Node.Data)^); //出错呀 end;大家给我指点一下。要怎样访问才可以。
TTreeNode的data属性可以用来存储指针的
这个好像是因为你这里的Scode是局部变量,CodeRecursion完成后它被释放,所以@Scode地址指向的内容变成不确定的了。你可以这样写: Procedure Tf_main.CodeRecursion(parent:Ttreenode;GoodsCode:String); var Node:TtreeNode; PScode:^string; //注意声明成指针 begin while not (qgoods.eof()) do begin if not (qGoods.FieldByName('goodstype').AsString='原材料') then begin Node:=Treeview1.Items.Addchild(Parent, qGoods.fieldbyname('GoodsName').AsString); New(PScode); //分配内存 PScode^:=qGoods.fieldbyname('goodscode').AsString; //注意是PScode^ Node.Data:=PScode; //不要@ end;//if end; //while endprocedure Tf_main.TreeView1Change(Sender: TObject; Node: TTreeNode); begin Showmessage(String(Node.Data^)); //应该这样写 end;
a:Pchar;
begin
tv1.Items.AddObject(TTreeNode.Create(nil),'adf',a);
var
Node:TtreeNode;
Scode:string;
begin
while not (qgoods.eof()) do begin
if not (qGoods.FieldByName('goodstype').AsString='原材料') then begin
Node:=Treeview1.Items.Addchild(Parent,
qGoods.fieldbyname('GoodsName').AsString);
Scode:=qGoods.fieldbyname('goodscode').AsString;
Node.Data:=@Scode;
end;//if
end; //while
endprocedure Tf_main.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
Showmessage(pstring(Node.Data)^); //出错呀
end;大家给我指点一下。要怎样访问才可以。
Procedure Tf_main.CodeRecursion(parent:Ttreenode;GoodsCode:String);
var
Node:TtreeNode;
PScode:^string; //注意声明成指针
begin
while not (qgoods.eof()) do begin
if not (qGoods.FieldByName('goodstype').AsString='原材料') then begin
Node:=Treeview1.Items.Addchild(Parent,
qGoods.fieldbyname('GoodsName').AsString);
New(PScode); //分配内存
PScode^:=qGoods.fieldbyname('goodscode').AsString; //注意是PScode^
Node.Data:=PScode; //不要@
end;//if
end; //while
endprocedure Tf_main.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
Showmessage(String(Node.Data^)); //应该这样写
end;
结贴