Nehmen wir an wir haben in einem Listview zwei Spalten: Name und dazugehörige E-Mail Adresse. Wenn ich jetzt an eine Person eine Mail schicken will, sollte man nicht auf die zweite Spalte im Listview zugreifen, sondern auf eine Datenstrucktur, die der Ansicht im Listview zugrundeliegt. Zum Beispiel ein Array of Record:
Delphi-Quellcode:
type
TKontakt = record
ID: Integer;
Name: String[255];
Mail: String[255];
end;
Wobei ID der Index des Eintrages im Listview sein kann. Schiebst du jetzt noch eine Spalte dazwischen, musst du nicht überall gucken, wo du auf die zweite Spalte zugreifst und dies in die dritte Spalte ändern, weil die E-Mail Adresse ja jetzt in der dritten Spalte steht. Natürlcih musst du jetzt darauf achten, dass die Eintrage synchron sind mit der zurgrundeliegenden Datenstruktur. Dieser Aufwand ist aber zu verschmerzen. Und je komplexer die Datenstrukturen sind, desto mehr Probleme bekommst du, wenn du Kontrollelemente zur Datenhaltung missbrauchst.
Die ImageList gehgört zum Listview. Aber die einzelnen Einträge der ImageList gehören ja irgendwie zu deinen Daten. Und wenn du an den Daten was änderst, soll sich ja auch das Icon aus der ImageListe ändern:
Delphi-Quellcode:
type
TFoobar = record
Item: ...;
ImageIndex: Integer;
end;
Änderst du jetzt waqs im Listview führst du auch die Änderung in deiner Datenstruktur durch. Und wenn du dann den Listview aus der Datenstruktur füllst, weißt du immer welches Icon aus der ImageListe zu deinem Eintrag gehört, weil du ja den Index mit deinem Eintrag gespeichert hast.