Alle dynamisch erstellten Objekte löschen
-
Hallo,
ich erzeuge zur Laufzeit verschiedene SpeedButtons und Images. Diese würde ich gerne alle komplett löschen.
Dies geht nicht, da sie nicht als Komponenten gelistet sind:
for(int i=0; i < frmMain->ComponentCount; i++) { TImage* img = dynamic_cast<TImage*>(frmMain->Components[i]); if (img) { // if (img->Name.SubString(1, 9) == "SpeedTImg") if (img->Name.SubString(1, 9) == "SpeedTImg" || img->Name.SubString(1, 4) == "ImgT" || img->Name.SubString(1, 5) == "imgT0") { delete img; } } TSpeedButton* sbtn = dynamic_cast<TSpeedButton*>(frmMain->Components[i]); if (sbtn) { if (sbtn->Name.SubString(1, 6) == "SpeedT") { delete sbtn; } } }
-
wie erstellst du die Komponenten denn? wer ist Parent der Komponenten? sind die Komponenten eventuell in einem Feld/Vector abgelegt?
-
Wichtiger als der Parent ist hier der Owner. Das ist das, was im Konstruktor der Komponenten beim Erstellen mit angegeben wird. Der ist für das löschen zuständig. Der Parent ist das worauf die Komponente angezeigt wird. Wenn dort 0 steht mußt du das selber machen.
Bsp.TSpeedButton* speed = new TSpeedButton(Owner);