问题在哪里?过路的看看呀!走一走,瞧一瞧! ( 积分: 100 )

  • 主题发起人 主题发起人 zzk123
  • 开始时间 开始时间
Z

zzk123

Unregistered / Unconfirmed
GUEST, unregistred user!
一、定义了一个类
// 从xml文件中读出的信息
type TUpdateFile=class
Name:string; //文件名
Version:string;
FileDate:TdateTime;
Size:integer;
end;
二、定义了一个变量
UpdateFile:TUpdateFile;//类的实例
List:TList;
三、
procedure TF_down.FormCreate(Sender: TObject);
begin
UpdateFile:=TUpdateFile.Create;
List:=TList.Create;
end;
四、从xml中读出到类中
for Filecount:=0 to cur_node.ChildNodes.Count-1 do
begin
Child_node:=cur_node.ChildNodes.Nodes[Filecount];

//取一个文件的信息到类中
UpdateFile.Name:=Child_node.ChildNodes.Nodes[0].Text;//取文件名
UpdateFile.Version:=Child_node.ChildNodes.Nodes[1].Text;//取文件名
UpdateFile.FileDate:=strtodate(Child_node.ChildNodes.Nodes[2].Text);//取文件名
UpdateFile.Size:=strtoint(Child_node.ChildNodes.Nodes[3].Text);//取文件名

List.Add(UpdateFile);
end;

五、取任一个文件的信息
for Filecount:=0 to List.Count-1 do
begin
list.item(Filecount);
ListItem:=Listv.Items.Add;
ListItem.Caption:=TUpdateFile(UpdateFile.Name);
ListItem.SubItems.Add(UpdateFile.Version);
ListItem.SubItems.Add(inttostr(UpdateFile.Size));
end;

现在的问题是不能正确的把读到类的信息写到listv中!请指点呀!
 
//取一个文件的信息到类中
[red]new(UpdateFile);//先分配内存[/red]
UpdateFile.Name:=Child_node.ChildNodes.Nodes[0].Text;//取文件名
UpdateFile.Version:=Child_node.ChildNodes.Nodes[1].Text;//取文件名
UpdateFile.FileDate:=strtodate(Child_node.ChildNodes.Nodes[2].Text);//取文件名
UpdateFile.Size:=strtoint(Child_node.ChildNodes.Nodes[3].Text);//取文件名
 
代码贴的不全,估计你显示到listv的值都是一样的(最后一个节点)


procedure TF_down.FormCreate(Sender: TObject);
begin
UpdateFile:=TUpdateFile.Create;
List:=TList.Create;
end;
 
正如PLOE所说,显示的是最后一个信息,还要加什么代码呀?
 
那位高手指点一下
 
三、
procedure TF_down.FormCreate(Sender: TObject);
begin
List:=TList.Create;
end;
四、从xml中读出到类中
for Filecount:=0 to cur_node.ChildNodes.Count-1 do
begin
Child_node:=cur_node.ChildNodes.Nodes[Filecount];
UpdateFile:=TUpdateFile.Create; //把这行移到这里,不然你只创建了一个对像实例(delphi里其实对像实例就是指向一个内存地址而已),而对一个内存地址进行多次写操作,只有最后一次的值会保留着,所以你每次必须分配不同的内存,以便保存不同的数据,在你这里也就是创建不同的对像实例,所以要把它放在循环里创建TUpdateFile的实例

祝你好运!
 
按djrj的指点,我把
四、改为:
for Filecount:=0 to cur_node.ChildNodes.Count-1 do
begin
Child_node:=cur_node.ChildNodes.Nodes[Filecount];
//取一个文件的信息到类中
UpdateFile:=TUpdateFile.Create;
UpdateFile.Name:=Child_node.ChildNodes.Nodes[0].Text;//取文件名
UpdateFile.Version:=Child_node.ChildNodes.Nodes[1].Text;//取文件名
UpdateFile.FileDate:=strtodate(Child_node.ChildNodes.Nodes[2].Text);//取文件名
UpdateFile.Size:=strtoint(Child_node.ChildNodes.Nodes[3].Text);//取文件名

List.Add(UpdateFile);
end;
五、改为

list.item(1);
showmessage(UpdateFile.Name);
显示的还是最后一个文件信息!!
什么原因?
 
有空的看看呀!
 
假设显示第一个:
UpdateFile := TUpdateFile(list.items[1]);
showmessage(UpdateFile.Name);
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
782
import
I
I
回复
0
查看
644
import
I
后退
顶部