Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Alle Elemente in Frame löschen (https://www.delphipraxis.net/170294-alle-elemente-frame-loeschen.html)

ManuKILLED 10. Sep 2012 09:40

Delphi-Version: 5

Alle Elemente in Frame löschen
 
Hey Leute,

ich hab mal wieder ein Problem.
Ich möchte alle Elemente aus einem Frame löschen, das Frame beinhaltet Label und Comboboxen...

Das einzige, was ich bisher gefunden habe ist:

Delphi-Quellcode:
for i := 0 to Form1.Frame21.componentcount-1 do begin
        if Form1.Frame21.components[i] is TComboBox
        then with Form1.Frame21.components[i] as TComboBox do begin
          hide;
        end ;
        if Form1.Frame21.components[i] is TLabel
        then with Form1.Frame21.components[i] as TLabel do begin
          hide;
        end ;
Leider funktioniert das nur mit .Hide und nicht mit .Destroy :/

Bei .Destroy kriege ich den Fehler, dass der Listenindex das Maximum überschreitet.

Mit besten Grüßen
Manu

mkinzler 10. Sep 2012 09:43

AW: Alle Elemente in Frame löschen
 
Beim Löschen die Schleife von oben nach unten ausführen, da das Löschen die Grenzen verschiebt.

Besser Free statt Destroy

himitsu 10. Sep 2012 10:06

AW: Alle Elemente in Frame löschen
 
Delphi-Quellcode:
for i := XXX to YYY do

Die Werte für XXX und YYY werden vor dem Ausführen der Schleife ausgewertet und zwischengespeichert, damit

Beim Löschen entfernst du etwas aus der Liste, womit sich alles ab dieser Stelle um 1 nach vorne verschiebt.
Also das Ende YYY würde bei jedem Löschen um 1 kleiner, aber da es zuschengespeichert ist, lies du irgendwann hinter dem Ende, außerdem überspringst du Einträge, denn da der Index (i) beim Löschen weiterwandert, aber da sich alles vorgeschoben hat, wird der Eintrag nach dem Löschen übersprungen.

Man kann mit einer While-Schleife arbeiten, wo die Abbruchbedingung bei jedem Durchgang ausgewertet und nicht zwischengespeichert wird. (das mit dem Überspringen mußt du da aber ebenfalls beachten)

Oder man geht eben rückwärts durch die Schleifen, da sich ja nur hinten was ändert und nicht vor der jeweils aktuellen Position.

haentschman 16. Sep 2012 09:28

AW: Alle Elemente in Frame löschen
 
Moin...

falls es noch von Relevanz ist... rufe einfach DestroyComponents deines Frames auf und schwupps ist alles leer. 8-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz