![]() |
Listview vergleichen und Löschen Problem
Hallo,
Ich habe 2 Listboxen. In der Listview1 stehen z.B: Thomas Susi Marc In der Listview2 stehen auch Nahmen. Mein Problem liegt darin, wenn ich nun in Listview1 mehrere verschiedene Namen Lösche, dann sollen die auch in der Listview2 gelöscht werden. ich hab es schon mit dem Code Versucht:
Delphi-Quellcode:
aber ich komme nicht weiter.
for il:= Listview1.Items.Count -1 downto 0 do
begin if Listview1.Items[il].Checked then begin Listview1.Items.Delete(il); if Listview2.Items.IndexOf(Listview1.Items[il]) > 0 then begin Listview2.Items.Delete(il); end; Hat jemand eine Idee? Gruß Bernd |
Re: Listview vergleichen und Löschen Problem
Ganz klar :). Du solltest das Item von ListView1 erst nach der Abfrage von ListView2 löschen!
Also...
Delphi-Quellcode:
lg
for iL = ListView1.Items.Count - 1 downTo 0 do
begin //Markiert? if ListView1.Items[iL].Checked then begin //Abfrage...nach Eintrag..wenn gefunden dann löschen.. if ListView2.Items.IndexOf(ListView1.Items[iL]) <> -1 then ListView2.Items.Delete(ListView2.Items.IndexOf(ListView1.Items[iL])); //Löschen vom Eintrag in ListView1 ListView1.Items.Delete(iL); end; end; Edit: Code ausgebessert bei .Delete(iL) |
Re: Listview vergleichen und Löschen Problem
Hi IceBube,
Danke für den anstoß klappt aber leider nicht. Ich muss dazu sagen das in Listview2 die Namen doppelt und dreifach drin stehen wenn ich alse in listview1 nur Thomas und Susi gechecket habe, soll auch nur in Listview2 1x Thomas und 1x Susi gelöscht werden. Gibs dafür ne Lösung? Gruß Bernd |
Re: Listview vergleichen und Löschen Problem
Und so?
Delphi-Quellcode:
for il:= Listview1.Items.Count -1 downto 0 do
begin if Listview1.Items[il].Checked then begin FoundAt := Listview2.Items.IndexOf(Listview1.Items[il]); if FoundAt > -1 then Listview2.Items.Delete(FoundAt); Listview1.Items.Delete(il); end; end; |
Re: Listview vergleichen und Löschen Problem
hallo,
@DeddyH Der Code ist Prima vielen Dank. Ich hatte aber schon ne andere Lösung. Ich hab dem Namen noch eine ID verpasst und somit einmalig gemacht. Welche der Lösungen ist besser oder schneller? Das ist der jetzige Code:
Delphi-Quellcode:
Gruß Bernd
if Listview1.Items[il].SubItems[4] = Listview3.Items[iil].SubItems[1] then
begin ListView3.Items.Delete(iiL); ListView1.Items.Delete(iL); end; |
Re: Listview vergleichen und Löschen Problem
Da Du den Code "außen rum" ja unterschlägst, mutmaße ich mal: kann es sein, dass das Item aus der 1. ListView nur dann gelöscht wird, wenn es eine Entsprechung in der 2. gibt? Ist das so beabsichtigt?
|
Re: Listview vergleichen und Löschen Problem
Hi @DeddyH,
Ja aber vom prinzip her wäre es egal. Ich denke das ich auf deinen Code zurück greife, du nur eine Schleife verwendes. Ich dagegen muss 2 Schleifen ein Bauen. Die Anzahl der Namen in Listview2 entspricht alle namen zusammen gefasst aus allen anderen Listen. Wenn ich also Liste1 oder Liste3 öffne und dort einen Namen Lösche soll dieser auch in der Gesamtliste gelöscht werden. Ich denke das deine Lösung die bessere wäre. Oder? Gruß Bernd |
Re: Listview vergleichen und Löschen Problem
Meine Lösung beruht auf der Überlegung: gehe in der 1. Listview alle Items durch. Ist das aktuelle angehakt, schaue nach einer Entsprechung in der 2. Listview und lösche diese ggf. Anschließend lösche auf jeden Fall das Item der 1. Listview. Ich denke mal, das sollte so richtig sein.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 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