为了满足用户多选和一次性删除的要求,我把ListView1的属性设置如下:
……
MultiSelect = True;
ViewStyle = vsReport;
……因此我想到了两种算法:算法一:
var
Item:TListItem;
begin
Item:=ListView1.Selected;
while Item<>nil do begin
Item.Delete;
Item:=ListView1.GetNextItem(Item, sdAll, [isSelected]);
end; // while
end;算法二:
var
I: Integer;
begin
for I := 0 to ListView1.Items.Count - 1 do begin // Iterate
if Listview1.Items[i].Selected then
Listview1.Items[i].Delete;
end; // for
end;可是这两个算法有明显的漏洞,在用户删除最后一个节点的时候,这两个算法都有问题,
尤其是第二个算法,循环上限ListView1.Items.Count居然每次都在变,非常不合乎常规。请教各位高手,如何来设计一个行之有效的算法来解决这个问题?
……
MultiSelect = True;
ViewStyle = vsReport;
……因此我想到了两种算法:算法一:
var
Item:TListItem;
begin
Item:=ListView1.Selected;
while Item<>nil do begin
Item.Delete;
Item:=ListView1.GetNextItem(Item, sdAll, [isSelected]);
end; // while
end;算法二:
var
I: Integer;
begin
for I := 0 to ListView1.Items.Count - 1 do begin // Iterate
if Listview1.Items[i].Selected then
Listview1.Items[i].Delete;
end; // for
end;可是这两个算法有明显的漏洞,在用户删除最后一个节点的时候,这两个算法都有问题,
尤其是第二个算法,循环上限ListView1.Items.Count居然每次都在变,非常不合乎常规。请教各位高手,如何来设计一个行之有效的算法来解决这个问题?
ListView1.Items.BeginUpdate();
....
ListView1.Items.EndUpdate();
if Listview1.Items[i].Selected then
Listview1.Items[i].Delete;
end;