Komponenten per Laufzeit erstellen und löschen - Löschen klappt nicht



  • Hallo Zusammen,
    ich habe ein kleines Problem mit während der Laufzeit erzeugten Komponenten. Ich möchte, dass man sie auch während der Laufzeit wieder löschen kann.

    Ich erstelle eine GrupBox, darauf ein Label und ein WebBrowser. Das klappt auch alles wunderbar. Am Ende möchte ich mit einem Klick auf das Label, dass die GroupBox, das Label und der WebBrowser gelöscht werden. Nur das löschen klappt nicht.

    Zum testen habe ich einfach per Button-Klick eine GroupBox erstellt. Mit einem zweite Button möchte ich die wieder löschen. Es passiert aber nichts:

    void __fastcall TFAdminBestellungAnschauen::Button15Click(TObject *Sender)
    {
    TGroupBox* GroupBox = dynamic_cast<TGroupBox*>(FAdminBestellungAnschauen->FindComponent("GBPDF"));
    if(!GroupBox)   {
    	TGroupBox *GBPDF = new TGroupBox(FAdminBestellungAnschauen);
    	GBPDF->ParentColor = false;
    	GBPDF->ParentBackground = false;
    	GBPDF->Color = 0x00FEDED6;
    	GBPDF->Parent = this;
    	GBPDF->Top = 26;
    	GBPDF->Left = 24;
    	GBPDF->Width = 984;
    	GBPDF->Height = 480;
    	GBPDF->OnClick = FAdminBestellungAnschauen->WebBrowserClick;
    	GBPDF->Show();
    }
    
    void __fastcall TFAdminBestellungAnschauen::Button14Click(TObject *Sender)
    {
    	delete GBPDF;
    }
    

    Was mache ich da falsch? Wo liegt der Fehler?

    Danke im voraus.



  • Hallo

    Du greift in Button14Click auf den Zeiger GBPDF zu, der aber nichts mit dem Zeiger GBPDF aus Button15Click zu tun hat. Denn in Button15Click deklarierst du einen lokalen Zeiger GBPDF, der den (globalen?) Zeiger GBPDF überdeckt.

    bis bald
    akari



  • In der .h Datei habe ich das so gemacht:
    [code="cpp"]
    public: // Anwender-Deklarationen
    __fastcall TFAdminBestellungAnschauen(TComponent* Owner);
    TGroupBox *GBPDF;
    };

    D.h. mit dem Button14Click lösche ich die GBPDF Groupbox aus dem public Bereich? Und da die nicht da ist passiert auch nichts?

    Wie spreche ich denn die GBPDF Groupbox aus dem Button15Click an? Oder wie kann ich unter Button15Click auf die GBPDF aus dem public Bereich zugreifen?

    Danke im voraus.



  • Hallo

    TGroupBox *GBPDF = new TGroupBox(FAdminBestellungAnschauen);
    

    Hier erstellt du in Button15Click einen lokalen Zeiger, der den gleichnahmigen Klassenzeiger überdeckt. Die Adresse der GroupBox wird an den lokalen Zeiger zugewiesen, der Klassenzeiger bekommt nichts davon mit.
    Ändere die Stelle zu

    GBPDF = new TGroupBox(FAdminBestellungAnschauen);
    

    , um den Klassenzeiger anzusprechen.

    bis bald
    akari



  • Danke schön. Das hat geklappt


Log in to reply