我用Tlistview的delete操作来删除列表项时老提示错误,怎么办?
tlistview设为vsReport显示风格。
源代码为:
 for i:=0 to listviewobject.Items.Count-1 do
    begin
     //showmessage(inttostr(listviewobject.ItemIndex));
     if listviewobject.Items[i].Checked then
      listviewobject.Items.Delete(i);    end;
老提示:
Access violation at address 0043f804 .

解决方案 »

  1.   

    for i:=listviewobject.Items.Count-1 downto 0 do
      

  2.   

    for i:=listviewobject.Items.Count-1 downto 0 do
    begin
      if listviewobject.Items[i].Checked then
         listviewobject.Items.Delete(i);end;
      

  3.   

    错误原因是你不能用For循环,不管是for i:=0 to listviewobject.Items.Count-1 do
    还是for i:=listviewobject.Items.Count-1 downto 0 do 前一种会因为删除了Item而使ItemIndex
    的值变化发生删除错误;
    后一种不会发生删除错误但会因为ItemIndex的值变化而使一些应该删除的Item不能被删除
    i:=0;
    while i<listview.items.count-1 do
      if listviewobject.Items[i].Checked then
        listviewobject.Items.Delete(i)
      else Inc(i);
      

  4.   

    只要是for循环销毁对象,都得downto!