Komponente zur Laufzeit erstellen und Entfernen [gelöst]



  • Hallo

    ich steh gerade auf dem Schlauch, vielleicht kann mir jemand bei dem einfachen Problem helfen:

    Ich erstelle ein Label dynamisch zur Laufzeit auf einem Panel:

    TLabel * Label;
    label = new TLabel(Panel2);
    label->Parent = Panel2;
    label->Name = "DynLabel1");
    label->Left = 463;
    label->Top = 21;
    

    wie werde ich dieses Label zur Laufzeit wieder los?
    bei

    delete Label;
    Label=NULL;
    

    Der Code funktioniert, leider wurde mir in der Zwischenzeit Label versehentlich auf NULL gesetzt....



  • AntonWert schrieb:

    Der Code funktioniert, leider wurde mir in der Zwischenzeit Label versehentlich auf NULL gesetzt....^

    Aha, versehentlich? Neutrinoeinschlag in der CPU oder was war der Grund?



  • Mit:

    label = new TLabel(Panel2);
    

    wird Panel2 zum Owner des label und übernimmt also auch das Löschen.



  • Braunstein schrieb:

    Mit:

    label = new TLabel(Panel2);
    

    wird Panel2 zum Owner des label und übernimmt also auch das Löschen.

    Ja schon, aber es setzt den Zeiger nicht auf NULL.



  • Das ist schon richtig. Ich wollte damit eigentlich nur sagen, dass ein explizites Löschen hier nicht notwendig wäre.
    Das Null-setzen muss er schon finden.



  • der borland compiler setzt tatsächlich beim delete den (oder die?!) zeiger auf null. zumindest manchmal. nichts worauf man sich verlassen sollte.
    voll banane.



  • debughilfe schrieb:

    der borland compiler setzt tatsächlich beim delete den (oder die?!) zeiger auf null. zumindest manchmal.

    Glaube ich nicht. Vielleicht sieht das im Debugger so aus, wenn's eine lokale Variable ist. Oder er macht es, wenn du FreeAndNil() aufrufst (was irgendwie klar ist).



  • gut möglich das ich das im Debugger beobachtet habe. Aber ist ja egal ob es "nur so aussieht". ich benutze ja den debugger um zu sehen was sache ist. Da ist sowas nur verwirrend und nervt.

    Nichtsdestotrotz muss man anmerken, dass sich der compiler da leider wohl standardkonform verhält. nach einem delete darf er die referenzen nullen, muss aber nicht.



  • Das glaube ich nicht, schließlich bekommt der Owner nur einen Zeiger auf die Komponente, deren Besitz er übernehmen soll. Er bekommt keine Referenz auf den Zeiger und hat damit keine Möglichkeit, den Zeiger auf NULL zu setzen. Ich habe keine Ahnung, was du da beobachtet hast, vor allem nicht, wenn´s nicht reproduzierbar ist.



  • ich schrieb ja nicht dass die owner-form den zeiger nullt sondern dass der compiler entsprechenden code generiert.
    Als ich das beobachtet habe, habe ich danach gegoogelt und genau von diesem verhalten des "borland compilers" (ich weiß nicht mehr welche Version) gelesen.
    Also glaubts oder nicht...


Log in to reply