Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - [VisualCLX] Bug in der TListView Klasse ?


rldrkmn - Mi 08.01.03 18:26
Titel: Bug in der TListView Klasse ?
Hallo,

wenn ich folgenden Code verwende:


Quelltext
1:
2:
3:
  for i := ListView1.Items.Count - 1 downto 0 do
    if ListView1.Items[i].Selected then
      ListView1.Items[i].Delete;


...und dann nur den letzten Eintrag in der Liste markiere und diesen Code ausführen lasse, dann killt er die gesamte Liste !? :shock:

Ist das ein Bug oder habe ich etwas falsch gemacht ???

Gruß
Chris


tommie-lie - Mi 08.01.03 20:24

nein, kein Fehler. Nur eine... Einschränkung.

Wenn du den letzten Eintrag markiert hast, und diesen löschst, dann springt die Markierung wieder zum Letzten (weil ja was markiert sein muss). Dieserletzte war vorher der vorletzte. Dann prüft er wieder, ob der Selected ist, und wieder löscht er ihn und wieder springt er eins zurück usw. Kettenreaktion -> alles gelöscht.

Auf die Schnelle:
Halte zuerst fest, welche Einträge markiert sind, und lösche sie erst dann, wenn du alle Eitnräge hast. Ein Anfang, der langsam, untypisch und ein schlechter Programmierstyl ist, aber dennoch die Aufgabe löst, wäre ein Array of Boolean, das genauso lang ist wie die Liste. Für jeden Index in der Liste guckst du zuerst ob er markiert ist und setzt dann entsprechend ium Array auf True. Alle, die True sind, löschst du dannach. Optimiertere und geschicktetre Methoden überlasse ich deinem Hirn.


rldrkmn - Mi 08.01.03 20:55

Achja ... logisch ... klar ! Ich habe nicht richtig nachgedacht :oops:

Danke für den Tipp !
Chris