![]() |
Items zweier ListBoxen vergleichen -> doppelte Items lösc
Hallo!
Ich habe 2 ListBoxen ich möchte in eine Suchroutine doppelte Einträge löschen: Wenn in ListBox1 ein Eintrag aus ListBox2 gefunden wird, soll er in ListBox1 gelöscht werden. Ich habe mir das so überlegt, aber es funktionier nicht (Listenindex überschreitet das Maximum):
Delphi-Quellcode:
Vielleicht sollte ich dazusagen, dass in der ListBox2 weniger Einträge stehen, als in der ListBox1.
procedure TForm1.Button1Click(Sender: TObject);
var i,r:integer; begin for i:=0 to ListBox2.Items.Count-1 do for r:=0 to ListBox1.Items.Count-1 do if ListBox2.Items.Strings[i]=ListBox1.Items.Strings[r] then ListBox1.Items.Delete(r); end; Hier ein Beispiel: In der ListBox1 stehen 400 Einträge (Items) In der ListBox2 stehen nur 100 Einträge Alle Einträge aus der ListBox2, die auch in der ListBox1 vorhanden sind, sollen in der ListBox1 gelöscht werden. Hat jemand einen Lösungsvorschlag? Gruß, dopeline |
Re: Items zweier ListBoxen vergleichen -> doppelte Items
arbeite einfach mit downto dann hast du das problem nicht mehr. Der fehler kommt zu stande weil du am Anfang der Schleife festlegst bis zu welchem Itemindex gesucht werden soll, aber in der Schleife verringert sich die Anzahl der Liste...
Delphi-Quellcode:
[Edit]Mir ist grad noch so eingefallen das es "indexOf" bei TStrings gibt[/Edit]
procedure TForm1.Button1Click(Sender: TObject);
var i,r:integer; begin for i:=ListBox2.Items.Count-1 downto 0 do for r:=ListBox1.Items.Count-1 downto 0 do if ListBox2.Items.Strings[i]=ListBox1.Items.Strings[r] then ListBox1.Items.Delete(r); end; |
Re: Items zweier ListBoxen vergleichen -> doppelte Items
schau dir mal IndexOf an.
außerdem mußt du die 2. Schleife von ListBox1.Count-1 downto 0 laufen lassen, wenn du aus dieser ListBox1 Items löscht. Roderich |
Re: Items zweier ListBoxen vergleichen -> doppelte Items
Hm, sehr merkwürdig, das müsste eigentlich so gehen, ich kann keinen Fehler finden... :gruebel:
|
Re: Items zweier ListBoxen vergleichen -> doppelte Items
Probiers mal so:
Delphi-Quellcode:
var
e : Integer; begin e := 0; while e < ListBox1.Items.Count-1 Do begin If ListBox2.Items.IndexOf(ListBox1.Items.Strings[e]) <> -1 then begin ListBox1.Items.Delete(e); end else e := e+ 1; end; end; |
Re: Items zweier ListBoxen vergleichen -> doppelte Items
siehe Code-Library:
![]() |
Re: Items zweier ListBoxen vergleichen -> doppelte Items
Ich habe es mit SirThornberrys Code versucht. Es funktioniert!
Vielen Dank euch allen für eure hilfe! Gruß, dopeline |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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