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 Listview vergleichen und Löschen Problem (https://www.delphipraxis.net/137727-listview-vergleichen-und-loeschen-problem.html)

Bernd29bln 27. Jul 2009 17:28


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:
   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;
aber ich komme nicht weiter.

Hat jemand eine Idee?

Gruß Bernd

IceBube 27. Jul 2009 17:41

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:
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;
lg

Edit:
Code ausgebessert bei .Delete(iL)

Bernd29bln 27. Jul 2009 18:09

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

DeddyH 27. Jul 2009 19:02

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;

Bernd29bln 28. Jul 2009 10:14

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:
        if Listview1.Items[il].SubItems[4] = Listview3.Items[iil].SubItems[1] then
          begin
           ListView3.Items.Delete(iiL);
           ListView1.Items.Delete(iL);
          end;
Gruß Bernd

DeddyH 28. Jul 2009 10:19

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?

Bernd29bln 28. Jul 2009 10:26

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

DeddyH 28. Jul 2009 10:36

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 01:40 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