ListView中如何一次删除多条信息(50分)

  • 主题发起人 主题发起人 echolan
  • 开始时间 开始时间
E

echolan

Unregistered / Unconfirmed
GUEST, unregistred user!
查询过程中,ListView中有许多ITEM符合查询的条件,并且不是顺序连在一起的,如何才能将他们一次性删除?
 
使用循环,判断满足条件的则删除。
 
var
i:integer;
begin
i:=0;
while i<ListView1.items.count do
begin
if (条件满足) then
begin
listview1.Items.Delete(i);
i:=i-1;
end;
i:=i+1;
end;
end;
 
这样也行,不过如果删除了就要调整i了,而且ListView.Items.Count会变小的,恐怕会出错!
刚想到一个办法,就是查询的时候先不删除,将所有符合条件的Item.selected:=true;等结束完查询后调用DeleteSelected删除!
 
用ITEMS。COUNT-1做循环,遇到符合条件的便删除,很重要的一点是:你必须从底下往上面删除(for i:=lv.items.count-1 downto 0 do),否则INDEX会改变会导致出错
 
可以采用 while i=ListView.items.count-1 downto 0 do 的方法做循环, 这样 ListView.Items.Count 的变化就不会影响到删除和循环操作了。
 
var
i:integer;
count : Integer;
begin
count := ListView1.items.count;
for i := count-1 downto 0 do
begin
if (条件满足) then
begin
listview1.Items.Delete(i);
end;
end;
end;
 
同意 siyan!!!
zyg_zm的做法完全没有必要!
 
我猜得不错的话,siyan 的代码有个不算 Bug 的 Bug :) 修改如下:
var
i:integer;
begin
i:=0;
while i<ListView1.items.count do
begin
if (条件满足) then
listview1.Items.Delete(i)
else // 这样写不是更清晰吗?何必要先减了再加?这还少用个 begin/end :)
i:=i+1;
end;
end;
 
同意 peng_qs!!!
siyan的算法不优化
 
To:beta
我没有看仔细,不过siyan大楷的思路是对的,
 
//不过siyan大楷的思路是对的
我都已经说了,是个“不算 Bug 的 Bug”:)
~~~~
 
事实上用For ...downto ... do循环最好,代码最优化!!!
 
后退
顶部