Autor Beitrag
rldrkmn
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mi 08.01.03 18:26 
Hallo,

wenn ich folgenden Code verwende:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
rldrkmn Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mi 08.01.03 20:55 
Achja ... logisch ... klar ! Ich habe nicht richtig nachgedacht :oops:

Danke für den Tipp !
Chris