麻烦大家看一下下面的代码为何总出错,要怎样改才行。谢了。
  for i:=0 to listview1.items.count-1 do
  begin
    if listview1.items.imtem[i].checked then
       begin
        listview1.items.delete(i);
       end;
  end;
  
注:LISTVIEW1里有5个条目,其中三条被钩选。
运行时出现内存读写错误。

解决方案 »

  1.   

    var
      I: Integer;
    begin
      I := 0;
      while I < listview1.items.count do
      begin
        if listview1.items.imtem[i].checked then
        begin
          listview1.items.delete(i);
        end
        else Inc(I);
      end;
    end;
    //listview1.items.delete(i);这条语句执行后
    listview1.items.count 会发生变化
    所以用For语句不好实现
      

  2.   

    其实比较简单的,用 Downto 即可 for i:=listview1.items.count-1 downto 0 do
      

  3.   

    不是,我说错了,应该是当执行
    listview1.items.delete(i);
    之后,下面的一条Item移上来了,
    所以循环变量I不应往下走,否则会错过处理一条记录的机会
      

  4.   

    TO : duanhai(段海) 
    谢了。你可否介绍一下INC这个函数是什么意思?
      

  5.   

    Inc是一个加函数看看帮助吧如Inc(I, 2)
    其结果是I加2相应的还有Dec函数
      

  6.   

    xxmmmx(踢踏) :你是牛人哦!!!
    简约而不简单哈 ~~~崇拜!!