Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listbox - "Leeritem" löschen (https://www.delphipraxis.net/67379-listbox-leeritem-loeschen.html)

Balu der Bär 13. Apr 2006 23:18


Listbox - "Leeritem" löschen
 
Ich nochmal,

habe jetzt folgendes Problem: Eine Listbox die unterschiedlich gefüllt ist. Manchmal sind auch ein oder zwei Leeritems drin, dass heißt eine Zeile ohne Inhalt darin. Wie kann ich diese Items löschen sodass der nachfolgende Inhalt direkt unter des zuletzt mit Inhalt befüllten Items steht (also alles einfach nachrutscht) ? Jemand ne Idee ? Thx.

DGL-luke 13. Apr 2006 23:23

Re: Listbox - "Leeritem" löschen
 
Delphi-Quellcode:
procedure DeleteEmptyLines(const lines: TStrings);
begin
while lines.IndexOf('') <> -1 do
  lines.Delete(lines.IndexOf(''))
end;

//Aufruf:
DeleteEmptyLines(Listbox1.Items);
:thumb:

EDIT: streichen könnte man das var, const ist aber schöner ;)

jbg 13. Apr 2006 23:24

Re: Listbox - "Leeritem" löschen
 
Eswas schneller geht es mit einer rückwärts laufenden FOR-Schleife:

Delphi-Quellcode:
for i := ListBox1.Items.Count - 1 downto 0 do
  if ListBox1.Items[i] = '' then
    ListbOx1.Items.Delete(i);

leddl 13. Apr 2006 23:25

Re: Listbox - "Leeritem" löschen
 
:gruebel: Was spricht dagegen, diese "Leeritems" einfach zu löschen, wie du es ja auch schon in deinem Titel schreibst? :gruebel:

Delphi-Quellcode:
For i := high(ListBox1.Items) DownTo low(ListBox1.Items) Do
  If ListBox1.Items[i] = '' Then ListBox1.Items.Delete(i);
//Mist, ich hab heut einfach kein Glück, ständig der rote Kasten :lol:
Ich denke aber, daß meine Variante schneller sein wird (:P), da bei mir die Items genau einmal durchlaufen werden, während es bei Lukes Version mindestens einmal passiert. ;)

//Edit: Na toll, den 2. roten Kasten hatte ich gar nicht gesehen :?

Balu der Bär 13. Apr 2006 23:31

Re: Listbox - "Leeritem" löschen
 
Ich danke euch, geht einwandfrei. Zu dieser Zeit bin ich zu nichts mehr fähig. :cheers:

Hawkeye219 13. Apr 2006 23:31

Re: Listbox - "Leeritem" löschen
 
Der Compiler dürft auch etwas gegen Lukes Version haben, weil die Items-Eigenschaft wegen des VAR-Parameters nicht übergeben werden kann. :wink:
Das "VAR" kann aber ersatzlos gestrichen werden.

Gruß Hawkeye

jbg 13. Apr 2006 23:32

Re: Listbox - "Leeritem" löschen
 
high(ListBox1.Items) und low(ListBox1.Items) wird nicht gehen, da ListBox1.Items kein Array sondern ein Property-Array ist (wird auch als Indexer bezeichnet).

leddl 13. Apr 2006 23:37

Re: Listbox - "Leeritem" löschen
 
Zitat:

Zitat von jbg
high(ListBox1.Items) und low(ListBox1.Items) wird nicht gehen, da ListBox1.Items kein Array sondern ein Property-Array ist (wird auch als Indexer bezeichnet).

Ja, das ist natürlich wahr. Und da die Items immer bei 0 beginnen und bis Count-1 laufen ist deine Version natürlich absolut korrekt. Was zählt ist die Idee in meinem Code :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr.

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