ListBox1有三个值,分别是A、B、C当我用以下语句删除的话,每次只能删除最后一个值。先删C,再删B,再删A,不能任意删除。var
  I:integerIf ListBox1.Selected[I] Then
begin
ListBox1.Items.Delete(I);但是改成如下却可以了,为什么呢?  I := 0;
  repeat
    If ListBox1.Selected[I] Then
    begin
       ListBox1.Items.Delete(I);
       Button2.Enabled := False;
       I := ListBox1.Items.Count - 1;
    End;
    I := I + 1;
  until I = ListBox1.Items.Count;

解决方案 »

  1.   

    因为当你删除一项后,ListBox1.Items.Count也减小了。
    也可以这样:
    var
      i: integer;for i := ListView1.Items.Count - 1 downto 0 do
    begin
      if ListView1.Selected[i] then
      begin
        ListView1.Items.Delete(i);
      end;
    end;
    从后往前删除。
      

  2.   

    任意选择,任意删除,可以多选:其中lb3为ListBoxprocedure Tfmedtqx2.BitBtn4Click(Sender: TObject);
    var
    k:integer;begin   k:=0;
      while k<=lb3.Items.Count-1  do
      beginif lb3.Selected[k] thenbegin
    lb3.Items.Delete(k);
    BitBtn4Click(Sender);  ////重復調用bitbtn4click,確保重新初始化k,如果寫成for ... lb3.items.delete(k)會發生k溢出錯誤
    end;
    k:=k+1;end;