AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

FMX Listview Einträge durchgehen

Ein Thema von jacky213 · begonnen am 8. Aug 2019 · letzter Beitrag vom 9. Aug 2019
Antwort Antwort
jacky213

Registriert seit: 2. Mär 2011
128 Beiträge
 
#1

FMX Listview Einträge durchgehen

  Alt 8. Aug 2019, 22:45
Ich versuche alle Listview Einträge durchzugehen und einen Eintrag zu Löschen sofern ein Element im Item sichtbar ist. Das funktioniert mit folgendem Code auch, allerdings bleiben beim ersten durchgang noch einige Items die gelöscht werden sollten in der Listview vorhanden. Sie verschwinden erst nach dem zweiten oder dritten durchgang.

Delphi-Quellcode:
   for Item in LVEinkauf.Items do
       if Item.Objects.FindObjectT<TListItemImage>('LineImage').Visible = true
       then LVEinkauf.Items.Delete(Item.Index);
woran kann es liegen und wie bekomme ich das ganze ohne Repeat hin?

Danke
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
27 Beiträge
 
#2

AW: FMX Listview Einträge durchgehen

  Alt 9. Aug 2019, 08:46
Hi Jacky,

vielleicht macht Delphi intern davon
Delphi-Quellcode:
for iPos := 0 to (LVEinkauf.Items.Count - 1) do
Begin
  Item := LVEinkauf.Items[iPos];
  if Item.Objects.FindObjectT<TListItemImage>('LineImage').Visible{ = true} then
  Begin
    LVEinkauf.Items.Delete(Item.Index);
  End;
End;

Dann würde er beispielsweise den 3 löschen, alle würden aufrücken (der 4te wird der 3te usw.)
und im nächsten Durchlauf würde er den 5ten nehmen, da dieser an der Position ist
wo zuvor der 4te war und somit den 4ten, der auf die gelöschte 3te Position gerutscht ist,
nicht mehr prüfen.
Wundert mich aber, dass Delphi so läuft.
Notfalls probier es von Hand, indem du die Schleife umdrehst:
Delphi-Quellcode:
for iPos := (LVEinkauf.Items.Count - 1) downto 0 do
Begin
  Item := LVEinkauf.Items[iPos];
  if (Item.Objects.FindObjectT<TListItemImage>('LineImage').Visible) then
  Begin
    LVEinkauf.Items.Delete(Item.Index);
  End;
End;

Das "if X = True then" kannst du dir übrigens sparen und direkt "if X then" schreiben.
Ist aber natürlich (wie so oft) Geschmackssache.

Liebe Grüße
Incocnito
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#3

AW: FMX Listview Einträge durchgehen

  Alt 9. Aug 2019, 09:12
Wundert mich aber, dass Delphi so läuft.
Wie sollte er/es denn sonst laufen?

Der Iterator geht vom ersten bis zum letzten Element durch die Liste.
Code:
a,b,c,d
^
Wenn der Iterator beim ersten Element ist, man dieses löscht, dann rutscht das eben noch zweite Element vor auf den Platz des ersten Elements.
Code:
b,c,d
^
Jetzt fordert man vom Iterator das nächste Element an
Code:
b,c,d
  ^
und landet beim anfänglich dritten Element.

In .net wirft der Iterator eine Exception wenn sich die zugrunde liegende Collection verändert hat. Das ist eine sehr praktische Sache.

Und ja, das Rückwärtslaufen über den Index ist hier das Mittel der Wahl.
  Mit Zitat antworten Zitat
jacky213

Registriert seit: 2. Mär 2011
128 Beiträge
 
#4

AW: FMX Listview Einträge durchgehen

  Alt 9. Aug 2019, 20:09
Das mit dem Downto loop hatte ich auch versucht, bekomme allerdings eine Zugriffsverletzung
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#5

AW: FMX Listview Einträge durchgehen

  Alt 9. Aug 2019, 22:02
Das mit dem Downto loop hatte ich auch versucht, bekomme allerdings eine Zugriffsverletzung
Oh, das ist aber nicht schön.

Wenn du den Code zeigen würdest, wäre auch mehr als nur ein „Oh“ drin.
  Mit Zitat antworten Zitat
jacky213

Registriert seit: 2. Mär 2011
128 Beiträge
 
#6

AW: FMX Listview Einträge durchgehen

  Alt 9. Aug 2019, 22:15
Manch Einer sieht den Wald vor lauter Bäumen nicht mehr....

for I := (LVEinkauf.Items.Count - 1) downto 0 do Hatte vergessen die Listview einzuklammern

Vielen dank für die Hilfe
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf