Ver Mensaje Individual
  #4  
Antiguo 28-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cuando se eliminan los items items de una lista, se hace desde atras para adelante (primero se borra el ultimo, luego se borra el anteultimo, y asi)

Imaginate que borras el primero (indice 0). Ahora la lista tiene que mover los elementos para que el que tenia indice 1, ahora tenga indice 0. Es por eso que tu bucle for no elimina todos los elementos

Te dejo este código de prueba para que experimentes:

Código Delphi [-]
procedure TForm1.btnLimpiarBienClick(Sender: TObject);
var
  I: Integer;
begin
  for I := ListBox1.Items.Count - 1 downto 0 do
    ListBox1.Items.Delete(I);
end;

procedure TForm1.btnLimpiarMalClick(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to ListBox1.Items.Count - 1 do
    ListBox1.Items.Delete(I);
end;

procedure TForm1.btnCopiarSeleccionadosClick(Sender: TObject);
var
  I: Integer;
begin
  Memo1.ClearContent;
  for I := 0 to ListBox1.Items.Count - 1 do
  begin
    if ListBox1.ListItems[i].IsSelected then
      Memo1.Lines.Add(ListBox1.Items[i]);
  end;
end;

procedure TForm1.btnCrearItemsClick(Sender: TObject);
begin
  CreateItems;
end;

procedure TForm1.CreateItems;
begin
  ListBox1.Items.Add('uno');
  ListBox1.Items.Add('Otro');
  ListBox1.Items.Add('y otro');
  ListBox1.ItemIndex := -1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListBox1.MultiSelectStyle := TMultiSelectStyle.Default;
  CreateItems;
end;

Aun asi, me sigue pareciendo mejor que se use el metodo Clear del ListBox que usando el bucle for
Responder Con Cita