SubItemImages gehen nach ListItem1->Assign(ListItem2) verloren



  • Hallo,
    folgender Code kopiert beim Sortieren mittels temporärem ListItem und Assign() das SubItemImage nicht mit. Weiß jemand warum?

    SubItemImage index 3 dem SubItem index 1 zuweisen

    for (int i = 0; i < ListView1->Items->Count;i++)
             {
                 if(ListView1->Items->Item[i]->SubItems->Strings[0] == player)
                 ListView1->Items->Item[i]->SubItemImages[1] = 3;
    
             }
    

    Aussschnitt aus dem Sortieralgo

    TListItem* tmp = ListView1->Items->Add();
    tmp->Assign(ListView1->Items->Item[i]);
    ListView1->Items->Item[i]->Assign(ListView1->Items->Item[i + 1]);
    ListView1->Items->Item[i + 1]->Assign(tmp);
    tmp->Delete();
    


  • Manchmal ist es sinnvoller sich über die Borlandhilfe hinaus über diverse Funktionen zu informieren 😃

    Assign kopiert nur bestimmte Eigenschaften und Daten. Ich habe den Dreiecktausch erweitert und so funktioniert es nun:

    TListItem* tmp = ListView2->Items->Add();
    tmp->Assign(ListView2->Items->Item[i]);
    tmp->SubItemImages[0] = ListView2->Items->Item[i]->SubItemImages[0];
    
    ListView2->Items->Item[i]->Assign(ListView2->Items->Item[i + 1]);
    ListView2->Items->Item[i]->SubItemImages[0] = ListView2->Items->Item[i + 1]->SubItemImages[0];
    
    ListView2->Items->Item[i + 1]->Assign(tmp);
    ListView2->Items->Item[i + 1]->SubItemImages[0] = tmp->SubItemImages[0];
    
    tmp->Delete();
    

    Ich tappte die ganze Zeit im Dunkeln mit der Annahme das Assign eine 1:1 Kopie aller Elemente des Items ermöglicht. AssignTo() deswegen zu überschreiben wäre im Angesicht des minimalen Nutzens/Aufwands eher mit Kanonen auf Spatzen...


Anmelden zum Antworten