![]() |
Re: Objekte zur Laufzeit erstellen und löschen
Zitat:
Es gäbe auch noch eine Alternative, bei der die Schleifenrichtung irrelevant ist, allerdings auch wieder etwas ineffektiver:
Delphi-Quellcode:
[edit]Entspricht der Lösung von jbg weiter oben. [/edit]
for i := 0 to List.Count - 1 do
ThrowIntoGarbage(List[0]); PS: Das halte ich für einen groben Designfehler in der VCL. Mit einer einfachen Control-Collection-Klasse würde ein "Controls.Clear" genügen und alle wären zufrieden. |
Re: Objekte zur Laufzeit erstellen und löschen
Delphi-Quellcode:
Was haltet ihr denn von dieser Lösung ... :mrgreen:
procedure TForm1.Button2Click(Sender: TObject);
begin while Panel1.ControlCount > 0 do begin showmessage(Panel1.Controls[0].name); Panel1.Controls[0].free; Application.ProcessMessages; end; end Da braucht kein Compiler irgendwas optimieren und die Diskussionen werden gespart :mrgreen: cu Oliver |
Re: Objekte zur Laufzeit erstellen und löschen
Zitat:
Und dein sowie das Beispiel von Rufo Sir zeigt zu allem Überfluss auch noch, daß es doch 'von vorne' geht, und zwar sowohl mit while als auch mit for. Halten wir doch für die interessierte Nachwelt fest, daß man von vorne nie das 'i-te', sondern immer nur das '0-te' Element wegwuschen darf - am effektivsten aber ist und bleibt for 'von hinten', da sich die Liste dabei nicht ständig neu justieren muß und keine while-Bedingung bei jedem Durchlauf neu geprüft werden muß. :warn: Feierabend! :stupid: |
Re: Objekte zur Laufzeit erstellen und löschen
Zitat:
Delphi-Quellcode:
/EDIT: Hat Peinhard ja doch schon erwähnt...
while Panel1.ControlCount > 0 do
begin showmessage(Panel1.Controls[Pred(Panel1.ControlCount)].name); Panel1.Controls[Pred(Panel1.ControlCount)].free; Application.ProcessMessages; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz