DynamicArray delete like TStringList::Delete



  • hallo leute

    kann mir bitte jemand erklären wie man bei einem DynamicArray den effekt bekommt wie wenn man ein item einer TStringList bekommt? ich meine den effekt, das Count (bzw. Length) und somit die indexs automatisch angepasst werden. ich erhalte bei einem DynamicArray mit diesem block:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	for(int i = 0; i < ListBox1->Items->Count; i++)
    	{
    		if(ListBox1->Selected[i])
    		{
    			//count und indexs stimmen stets
    			ListBox1->Items->Delete(i);
    
    			//das funktioniert zwar aber nicht lange
    			//irgendwann stimmen die indexes nicht mehr oder sind tot
    			//obwohl ich dachte mit dem zerstören der objekte und
    			//anschliessendem verringern von Length, hat es den gleichen
    			//effekt wie Delete von TListBox..........
    			delete DynArray[i];
    			DynArray[i] = NULL;
    			DynArray.Length--;
    		}
    	}
    }
    

    leider nicht den erwünschten effekt. habe auch schon versucht ein temporäres DynamicArray anzulege und dann dort die lebenden instanzen von DynArray zuzuweisen. auch das gibt nicht den erwünschten erfolg.



  • Hi,
    Hast Du MultiSelect in der ListBox aktiviert? Beachte dann den Effekt, dass wenn Du in StringList ein Element entfernst, dass die anderen nachrutschen müssen, damit das Feld lückenlos indizierbar bleibt.
    Warum quälst Du Dich mit DynArray? Du kannst doch std::vector verwenden.


Anmelden zum Antworten