Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Items aus ListBox löschen! (https://www.delphipraxis.net/115754-items-aus-listbox-loeschen.html)

mo_greene 17. Jun 2008 13:48


Items aus ListBox löschen!
 
Hallo,

ich würde gerne alle leeren Items aus meiner ListBox löschen, jedoch kann es sein, dass diese zu der Zeit, wo die Prozedur aufgerufen wird, total leer ist.
Folgendes habe ich mir überlegt:

Delphi-Quellcode:
  if ListBox.Count >= 1 then
  begin
    for i := 0 to ListBox.Count do
    begin
      if ListBox.Items.Strings[i] = '' then
      begin
        ListBox.Items.Delete(i);
      end;
    end;
  end;
Leider bekomme ich eine Meldung: Exception der Klasse EStringListError mit der Meldung 'Listenindex überschreitet das Maximum(16)'.

Woran kann das liegen?

Danke :)

mkinzler 17. Jun 2008 13:53

Re: Items aus ListBox löschen!
 
Beim Löschen, immer von oben, da sonst die Grenze nie erreicht wird, da nach Löschen des ersten, der 2. den Index 0 bekommt. Oder immer den 1. Löschen.
In diesem Fall könntest du auch
Delphi-Quellcode:
ListBox1.Clear;
aufrufen.

Fussball-Robby 17. Jun 2008 13:55

Re: Items aus ListBox löschen!
 
2 Sachen:
1. Die Schleife muss rückwärts laufen, also nicht for..to sondern for..downto.
Sagen wir mal, die ListBox hat 10 Einträge. Wird jetzt einer gelöscht, sind es nur noch 9, die Schleife läuft trotzdem bis 10 durch.
2. Muss es so heißen:
Delphi-Quellcode:
for i := 0 to ListBox.Count - 1 do
Da es bei 0 anfängt, ist das letzte Element Count - 1

Mfg

[Edit]
Zitat:

Zitat von mkinzler
In diesem Fall könntest du auch
Delphi-Quellcode:
ListBox1.Clear;
aufrufen.

Zitat:

Zitat von mo_greene
ich würde gerne alle leeren Items aus meiner ListBox löschen


mo_greene 17. Jun 2008 13:58

Re: Items aus ListBox löschen!
 
Ich habe es jetzt so gemacht

Delphi-Quellcode:

  if ListBox.Count >= 1 then
  begin
    for i := ListBox.Count downto 0 do
    begin
      if ListBox.Items.Strings[i] = '' then
      begin
        ListBox.Items.Delete(i);
      end;
    end;
  end;
Leider bekomme ich immernoch die gleiche Fehlermeldung :gruebel:

mkinzler 17. Jun 2008 13:59

Re: Items aus ListBox löschen!
 
Delphi-Quellcode:
for i := ListBox.Count-1 downto 0 do

mo_greene 17. Jun 2008 14:05

Re: Items aus ListBox löschen!
 
Klasse, vielen Dank! :)

marabu 17. Jun 2008 17:29

Re: Items aus ListBox löschen!
 
Hallo,

für den Eingangstest hast du gar keine Erklärung geliefert.

Delphi-Quellcode:
procedure DeleteItems(s: TStrings; const item: string = '');
var
  i: Integer;
begin
  s.BeginUpdate;
  try
    for i := Pred(s.Count) downto 0 do
      if s[i] = item then
        s.Delete(i);
  finally
    s.EndUpdate;
  end;
end;
Getippt und nicht getestet.

Grüße vom marabu

Muetze1 17. Jun 2008 17:33

Re: Items aus ListBox löschen!
 
Zitat:

Zitat von mo_greene
Klasse, vielen Dank! :)

Schalte zum programmieren die Bereichsprüfung in deinem Projekt an und du wärst vom Programm mit der Nase drauf gestossen worden...

mo_greene 17. Jun 2008 17:54

Re: Items aus ListBox löschen!
 
Zitat:

Zitat von Muetze1
Schalte zum programmieren die Bereichsprüfung in deinem Projekt an und du wärst vom Programm mit der Nase drauf gestossen worden...

Wie schalte ich die ein?

Muetze1 17. Jun 2008 18:01

Re: Items aus ListBox löschen!
 
Projekt -> Optionen -> Compiler -> Bereichsprüfung


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz