tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
4293
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Online-Skater
    Online-Skater Online-Skater ist offline Mitglied Brillant
    Registriert seit
    Sep 2004
    Ort
    Rostock
    Beiträge
    891
    Hallo

    Wie im Titel beschrieben möchte ich gerne neu erstellte Objekte löschen. Ich habe ein DropDown Menü mit Feldern von 2-10 und bei dem Ereignis OnChange möchte ich die vorher creirten Objekte löschen, falls welche da sind und dann dementsprechend viele anlegen.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    const short int x=8;
      TLabel *RLab[x];
      TEdit  *REdi[x];
      short int y = anzahl->ItemIndex;
     
      for (int i=0;i<num;i++)
      {
        delete RLab[i];  // <-- da ist der Fehler
      }
      num = 0;
     
      for (int i=0;i<y;i++)
      {
        RLab[i] = new TLabel(this);
        RLab[i]->Parent = this;
        RLab[i]->Width = 14;
        RLab[i]->Left = 195;
        RLab[i]->Top = 103+(i*25);
        int z = i+3;
        RLab[i]->Caption = "R"+String(z);
        RLab[i]->Name = "wid"+String(z);
        num++;
      }

    Ich weis nun nicht warum das falsch ist und wie ich das nun lösen kann, die Hilfe hat mir auch nicht geholfen da ich das z.B. mit Vektoren nicht kann usw.
     

  2. #2
    Avatar von youngProgrammer
    youngProgrammer youngProgrammer ist offline Mitglied Bronze
    Registriert seit
    Aug 2003
    Beiträge
    43
    Die erste Schleife wird ja in jedem Fall ausgeführt, also auch, wenn noch keine Labels erstellt wurden, was ja erst in der zweiten Schleife passiert.

    So wie ich das sehe, versuchst du also etwas zu löschen, was noch gar nicht da ist. Und das geht natürlich schief. Wenn du vorher prüfst, ob ein Objekt da (also nicht NULL) ist, sollte es meiner Meinung nach klappen:

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    for (int i=0;i<num;i++)
    {
        if(RLab[i] != NULL)
        {
            delete RLab[i];
        }
    }

    Gruß, youngProgrammer
     

  3. #3
    Avatar von Online-Skater
    Online-Skater Online-Skater ist offline Mitglied Brillant
    Registriert seit
    Sep 2004
    Ort
    Rostock
    Beiträge
    891
    Hi

    naja also so leicht ist das leider nicht, darüber habe ich auch schon nachgedacht aber wie du bestimmt weist wird eine for-Schleife nur dann ausgeführt wenn die Bedingung stimmt (2ter Parameter) und da am Anfang num = 0; geht er beim erstmaligen Changen auch nicht rein.
    Sobald ich aber das 2te mal change ist num > 0 und dann bekomme ich ein EAccessViolationfehler, ein Zugriffsfehler. Ich habe leider keine Ahnung wie ich das Objekt wieder entfernen bzw freigeben kann.
    Geändert von Online-Skater (28.05.06 um 00:38 Uhr)
     

  4. #4
    Avatar von youngProgrammer
    youngProgrammer youngProgrammer ist offline Mitglied Bronze
    Registriert seit
    Aug 2003
    Beiträge
    43
    Du hast Recht, es ist eigentlich sogar viel simpler. Ich habe das ganze jetzt mal selbst ausgetestet (ich weiß, das hätte ich wohl schon vor dem ersten Post machen sollen *g*) und nach einigem herumexperimentieren habe ich es dann herausgehabt:

    Du erstellst am Anfang der Funktion den Array RLab immer wieder neu. Und darüber stolpert die erste Schleife dann. Wenn du also die Zeile

    Code :
    1
    
    TLabel *RLab[x];

    rausnimmst und z.B. in den private- oder public-Bereich der Formular-Klasse einfügst, sollte es funktionieren.
    Natürlich musst du dann auch die Variable x verschieben oder du benutzt eine #define-Konstante oder schreibst die Array-Größe gleich direkt zwischen die Klammern. Aber das kannst du ja machen, wie es dir am Liebsten ist.

    Gruß, youngProgrammer
    Geändert von youngProgrammer (27.05.06 um 21:15 Uhr)
     

  5. #5
    Avatar von Online-Skater
    Online-Skater Online-Skater ist offline Mitglied Brillant
    Registriert seit
    Sep 2004
    Ort
    Rostock
    Beiträge
    891
    Boah vielen Dank das ist es

    Darauf wäre ich echt nie gekommen
    Japp so einfach kann das sein nur der Compiler führte mich nicht auf die richtige Fährte is halt kein Delphi

    Also nochmal recht herzlichen Dank
     

Ähnliche Themen

  1. [VC++.NET] dynamische Arrays
    Von Byte3 im Forum VisualStudio & MFC
    Antworten: 11
    Letzter Beitrag: 11.08.05, 21:22
  2. Dynamische Arrays
    Von bastiglasl im Forum Java
    Antworten: 2
    Letzter Beitrag: 07.10.04, 13:45
  3. Dynamische Arrays? $array['a'.$i]
    Von mXa im Forum PHP
    Antworten: 3
    Letzter Beitrag: 17.09.03, 14:25
  4. DLL und dynamische Arrays
    Von SpareTimeX im Forum Delphi, Kylix, Pascal
    Antworten: 4
    Letzter Beitrag: 04.07.03, 13:41
  5. Dynamische Arrays
    Von Daniel Toplak im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 17.04.02, 00:04