![]() |
FMX Listview Einträge durchgehen
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:
woran kann es liegen und wie bekomme ich das ganze ohne Repeat hin?
for Item in LVEinkauf.Items do
if Item.Objects.FindObjectT<TListItemImage>('LineImage').Visible = true then LVEinkauf.Items.Delete(Item.Index); Danke |
AW: FMX Listview Einträge durchgehen
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 |
AW: FMX Listview Einträge durchgehen
Zitat:
Der Iterator geht vom ersten bis zum letzten Element durch die Liste.
Code:
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.
a,b,c,d
^
Code:
Jetzt fordert man vom Iterator das nächste Element an
b,c,d
^
Code:
und landet beim anfänglich dritten Element.
b,c,d
^ 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. |
AW: FMX Listview Einträge durchgehen
Das mit dem Downto loop hatte ich auch versucht, bekomme allerdings eine Zugriffsverletzung
|
AW: FMX Listview Einträge durchgehen
Zitat:
Wenn du den Code zeigen würdest, wäre auch mehr als nur ein „Oh“ drin. |
AW: FMX Listview Einträge durchgehen
Manch Einer sieht den Wald vor lauter Bäumen nicht mehr....
Delphi-Quellcode:
Hatte vergessen die Listview einzuklammern :oops:
for I := (LVEinkauf.Items.Count - 1) downto 0 do
Vielen dank für die Hilfe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 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 by Thomas Breitkreuz