关于treeview控件的data属性!困扰多日,望高手指点!
现有table和treeview控件
其中,table结构如下
myid:自动编号类型
菜单标题:string;
myparentid:integer;//指向myid,表明层次关系
先定义记录类型
type
PMyList = ^AList;
AList = record
MyParendID: string;
xxx:integer; //为验证节点值特意增加的测试域
MyNodeP: TTreeNode ;
end;
//定义生成节点的过程
procedure Tform1.MyNode(MyParentID:string;MyNodeT:TTreeNode);
var
ATempList: TList;
I: Integer;
ARecord:PMyList;
s:string;
node:TTreeNode;
begin
ADOTable1.Filtered:=true;
ADOTable1.Filter:=' MYParentID ='+MyParentID;
if ADOTable1.RecordCount<1 then exit;
ATempList := TList.Create;
try
ADOTable1.First;
while not ADOTable1.Eof do
begin
New(ARecord);
s:='('+ADOTable1.fieldbyname('MyID').AsString +')'+ ADOTable1.fieldbyname('菜单标题').AsString ;
node:= TreeView1.Items.AddChild(MyNodeT ,s) ;
ARecord^.MyParendID:= ADOTable1.fieldbyname('myid').AsString;
Arecord^.MyNodeP :=node;
Arecord^.xxx:=222;
node.Data :=Arecord; //将记录值赋给节点的data属性
caption:=caption+inttostr(pmylist(node.data)^.xxx) ;
ATempList.Add(Arecord);
ADOTable1.Next;
end;
for I :=0 to ATempList.Count - 1 do
begin
Arecord:=ATempList.Items[i];
MyNode(Arecord^.MyParendID,Arecord^.MyNodeP );
end;
finally
for I := 0 to ATempList.Count - 1 do
Dispose(ATempList[I]);
ATempList.Free;
ADOTable1.Filtered:=false;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyNode('0',nil );
end;
//检查节点的data属性
procedure TForm1.Button1Click(Sender: TObject);
var
CurItem: TTreeNode;
begin
listbox1.Clear;
CurItem := TreeView1.Items.GetFirstNode;
while CurItem<>nil do
begin
showmessage(curitem.Text); //运行结果正常
showmessage(pmylist(curitem.Data )^.MyParendID ); //报AV错,取不到值
showmessage(inttostr(pmylist(curitem.Data )^.xxx)); //取到了值,有部分是生成节点时的222,另外一部分不是.
CurItem := CurItem.GetNext;
end;
end;
现请高手指点,Button1Click中那两句取节点data属性的执行结果为什么不正确?