Wie lösche ich einen dynamisch erzeugten BitBtn aus einer ScrollBox?



  • Hallo Leute
    Nachdem mir hier gestern so nett geholfen wurde, traue ich mich mal noch eine weitere Frage zu stellen.
    Ich erzeuge zur Laufzeit BitBtns in einer Scrollbox.
    Nun möchte ich diese Buttons auch zur Laufzeit wieder löschen können.
    Ich hab jetzt einige Stunden versucht anhand der FAQ-Lösung weiter zu kommen.
    Aber es kommen immer nur Fehlermeldungen zur Laufzeit (Zugriffsverletzungen).
    Bisher habe ich es so versucht:

    for (int i = 0; i < Form2->ComponentCount; i++) {
    if (Form2->Components[i]->ClassNameIs("TBitBtn")) {
    dynamic_cast<TBitBtn *>(Form2->Components[i])->RemoveComponent(Form2->Components[i]);
    }
    }
    

    Mir fehlt das Verständnis, wie man ein (oder in meinem Fall mehrere) Controls löscht.
    Ich weiss einfach nicht, was ich bei RemoveComponent(?) übergeben muss.
    Oder ist der Ansatz komplett falsch und ich brauche

    delete
    

    ?
    Wenn jemand Lust hätte, mir dahingehend auf die Sprünge zu helfen, wäre ich echt froh.
    Danke



  • Einfach mit delete löschen.



  • Die Denkweise war verkehrt. Du willst keine Komponente vom Objekt der Klasse TBitBtn löschen, sondern eine Komponente eines Objekts vom Typ TForm.

    for (int i = Form2->ComponentCount-1; i >= 0; i--) {
      if (Form2->Components[i]->ClassNameIs("TBitBtn")) {
        Form2->RemoveComponent(Form2->Components[i]);
      }
    }
    

    Man beachte außerdem, dass hier die Komponenten von hinten durchgegangen werden. Das hat den einfachen Grund, dass ein Entfernen logischerweise die Komponentenliste neu erzeugt und damit auch die Anzahl runter geht. Beim Raufzählen werden damit möglicherweise Komponenten übergangen. Beim Rückwärtszählen nicht.



  • Ok, ich danke euch.

    Man beachte außerdem, dass hier die Komponenten von hinten durchgegangen werden. Das hat den einfachen Grund, dass ein Entfernen logischerweise die Komponentenliste neu erzeugt und damit auch die Anzahl runter geht. Beim Raufzählen werden damit möglicherweise Komponenten übergangen. Beim Rückwärtszählen nicht.

    Da ist natürlich was dran.
    Danke


Anmelden zum Antworten