我做的是一个资源管理器,下面的代码是资源管理器右边的listview的点击事件的代码,程序运行后,当第一次点击listview中的项的时候,能够将它的子项添加到listview中去,当再点击它的子项时要不就是报错要不就是没反应,而且本来是文件夹的它搞成了文件,是文件的它却搞成了文件夹。。我测试了下,原本通过data属性绑定在它的子项上面的路径与其他的项全部混淆,就是A的路径到B的上面去了,B的到C的上面去了。大家帮忙看看。。!procedure TForm1.lv1Click(Sender: TObject);
type
pp=^string;
var
litem:TListItem;
path:string;
list1: TStrings;
list2: TStrings;
I: Integer;
ss:pp;
subpath:string;
begin
if(lv1.Selected<>nil) then
begin
litem:=lv1.Selected;
path:=pp(litem.Data)^;
ShowMessage(path);
if(lv1.Selected.ImageIndex=3) then {如果是文件夹}
begin
list1:=TStringList.Create;
list2:=TStringList.Create; list1:=getfile(path);
list2:=getsubdir(path); lv1.Clear;
for I := 0 to list2.Count-1 do {添加文件夹}
begin
subpath:=path+list1[i]+'\';
litem:=lv1.Items.Add;
litem.ImageIndex:=3;
litem.Caption:=list2[i];
new(ss);
ss^:=subpath;
litem.Data:=ss;
end;
for I :=0 to list1.count-1 do {添加文件}
begin
subpath:=path+list1[i]+'\';
litem:=lv1.Items.Add;
litem.ImageIndex:=5;
litem.Caption:=list1[i];
new(ss);
ss^:=subpath;
litem.Data:=ss;
end; Dispose(litem.Data);
list1.Clear;
list2.Clear; end; end;
end;
----------------------------------------------
type
pp=^string;
var
litem:TListItem;
path:string;
list1: TStrings;
list2: TStrings;
I: Integer;
ss:pp;
subpath:string;
begin
if(lv1.Selected<>nil) then
begin
litem:=lv1.Selected;
path:=pp(litem.Data)^;
ShowMessage(path);
if(lv1.Selected.ImageIndex=3) then {如果是文件夹}
begin
list1:=TStringList.Create;
list2:=TStringList.Create; list1:=getfile(path);
list2:=getsubdir(path); lv1.Clear;
for I := 0 to list2.Count-1 do {添加文件夹}
begin
subpath:=path+list1[i]+'\';
litem:=lv1.Items.Add;
litem.ImageIndex:=3;
litem.Caption:=list2[i];
new(ss);
ss^:=subpath;
litem.Data:=ss;
end;
for I :=0 to list1.count-1 do {添加文件}
begin
subpath:=path+list1[i]+'\';
litem:=lv1.Items.Add;
litem.ImageIndex:=5;
litem.Caption:=list1[i];
new(ss);
ss^:=subpath;
litem.Data:=ss;
end; Dispose(litem.Data);
list1.Clear;
list2.Clear; end; end;
end;
----------------------------------------------
for I := 0 to list2.Count-1 do {添加文件夹}
begin
subpath:=path+list1[i]+'\'; litem:=lv1.Items.Add;
litem.ImageIndex:=3;
litem.Caption:=list2[i];
new(ss);
ss^:=subpath;
litem.Data:=ss;
end;错误我找出来了,我把list2写成了list1......哪里释放什么了?