Keine Datenhaltung in der Anzeige. (Index der Komponente ist vollkommen egal)
C und D fehlen, dennoch keine Probleme damit.
Items löschen, einfügen, verschieben, sortieren, umbenennen (z.B. Mehrsprachigkeit) ... alles keine Problem.
Delphi-Quellcode:
ListBox1.Items.AddObject('A', TObject(0));
ListBox1.Items.AddObject('B', TObject(1));
ListBox1.Items.AddObject('E', TObject(4));
ListBox1.Items.IndexOf('E') == 2
NativeInt(ListBox1.Items.Objects[2]) == 4
Es ist zwar als TObject deklariert, aber in der LISTBOX (
WinAPI) ist es bloß ein dummer "Integer".
CB_SETITEMDATA
Falls du keine bösen Casts magst, dann nimm eben ein Datenobjekt dafür.
Delphi-Quellcode:
type
TDataObject = class
Index: Integer;
constructor Create(AIndex: Integer);
end;
ListBox1.Items.AddObject('A', TDataObject.Create(0));
ListBox1.Items.AddObject('B', TDataObject.Create(1));
ListBox1.Items.AddObject('E', TDataObject.Create(4));
ListBox1.Items.IndexOf('E') == 2
TDataObject(ListBox1.Items.Objects[2]).Index == 4
// und die Freigabe natürlich nicht vergessen