Listview-Items selbstdefinierte Objekte zuordnen

  • als erstes sollte man sich eine Klasse definieren, die die Speicher-Objekte beschreibt (in einer Header-Datei)
class TListItemData
{
    public:

    // Konstruktor der Klasse
    TListItemData(){};

    // Objektvariablen
    int iId;
    AnsiString sName;
};
  • Um ein Objekt einem Listview-Item zuzuordnen muss man folgendermaßen vorgehen
// Zeiger für das Listitem definieren
TListItem *ListItem;

// neues Listitem hinzufügen
ListItem = ListView->Items->Add();
ListItem->Caption = "Eintrag";

// neues Datenobjekt erzeugen
TListItemData *ItemData = new TListItemData();
ItemData->iId = 1;
ItemData->sName = "Horst";

// Datenobjekt dem Listitem zuordnen (Zeiger übergeben)
ListItem->Data = ItemData;
  • Der Zugriff auf ein solches Objekt kann wie folgt realisiert werden
void __fastcall TForm1::ListViewClick(TObject *Sender)
{
    if (ListView->Selected)
    {
        TListItemData *TempItem;

        // Datenzeiger vom akt. Listviewelement holen
        TempItem = (TListItemData*)ListView->Items->Item[i]->Data;

        // Wenn ein gültiger Zeiger vorhanden (!= NULL)
        if (TempItem)
        {
            Label1->Text = IntToStr(ItemData->iId);
            Label2->Text = ItemData->sName;
        }
        else // sonst Fehlermeldung
        {
            ShowMessage("Objekt nicht verfügbar!");
        }
    }
}
  • naturlich darf man das Löschen der so zugewiesenen Speicherobjekte nicht vergessen, dazu dient folgende Funktion
void __fastcall TForm1::DeleteAllItemData()
{
    TListItemData *TempItem;

    // Alle Items->Data des Listviews löschen
    for (int i=0; i<ListView->Items->Count; i++)
    {
        // Zeiger auf das akt. ListItem->Data->Objekt holen
        TempItem = (TListItemData*)ListView->Items->Item[i]->Data;
        if (TempItem)
        {
            // alle Zeiger und Objekte löschen
            ListView->Items->Item[i]->Data=NULL;
            delete TempItem;
            TempItem = NULL;
        }
    }
}