Probleme mit dynamischen TPageControl



  • Hallo,

    ich hab ein PageControl [Name:pcMain] mit einem TTabSheet[Name:pgRN] (nicht dynamisch)

    In diesem Tabsheet pgRN erstelle ich dynamisch ein weiteres PageControl !
    Dieses möchte ich jetzt per Button Click wieder löschen

    Dazu hab ich unter dem Button-Click Ereigniss folgenden Code geschrieben :

    for (int i=0;i<pgRN->ControlCount;i++)
    {
         if (pgRN->Controls[i]->ClassNameIs("TPageControl"))
         {
             // Alle Tabs des alten PageControls löschen
             TPageControl *pc_tmp = (TPageControl *)pgRN->Controls[i];
             if (pc_tmp)
             {
               delete (pc_tmp);
             }
         }
    }
    

    Bekomme aber immer eine Zugriffsverletzung 😞

    Jemand eine Idee ? Danke schon mal im Voraus 😃



  • Wo genau bekommst du die?

    Edit: Ich vermute, es liegt daran, dass du beim Löschen das Element aus dem Control entfernt und sich dadurch Count um eins verringert, deine Prüfung aber geht noch von der Anzahl vor der Löschung aus un greift dann auf was uninitialisiertes zu, und dann "schepperts" 😃

    Du kannst das z.B. so lösen, indem du die Schleife rückwärts laufen lässt.



  • Beim delete Befehl 🙂



  • Das Ganze kann man noch etwas vereinfachen.

    for (int i=0;i<pgRN->ControlCount;i++)
    {
        TPageControl* pc_tmp = dynamic_cast<TPageControl*>(pgRN->Controls[i]);
        if (pc_tmp)
            delete pc_tmp;
    }
    

    Dieser Code entfernt natürlich alle PageControls und müsste eigentlich auch ohne rückwärts zu laufen funktionieren. Besser wäre es wohl nur den PageControl zu löschen, den man auch selber dynamisch erstellt hat.



  • AAAAhhhhhhhhh verstehe 😉

    jetzt ist der Groschen gefallen.

    Dank euch für die Hilfe 🙂 Hätt ich auch selbst drauf kommen können.

    Thx

    😃


Log in to reply