Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi löschen von Checkboxes! (https://www.delphipraxis.net/143928-loeschen-von-checkboxes.html)

daNiii 26. Nov 2009 08:32


löschen von Checkboxes!
 
Programcode:
Delphi-Quellcode:
procedure tform1.checkboxes_destroy();
var

i: integer;
begin
i:= checkbox_anzahl;


      while 1 < i do begin
      i:= i-1;
      if Controls[i] is Tcheckbox then begin
      tcheckbox(Controls[i]).Destroy;
      end;
end;
end;
Information:
checkbox_anzahl ist eine globale Variable (integer).
Die Checkboxes werden in einer Schleife mit hilfe einer Array-variable erstellt.
Deshalb kann ich nicht auf eine bestimmte Checkbox zugreifen.

Problem:
Ich möchte die erstellten checkboxes wieder löschen, doch es passiert garnichts.
Wo liegt das Problem?

LG Daniii

DeddyH 26. Nov 2009 08:36

Re: löschen von Checkboxes!
 
Wieso greifst Du dann nicht direkt auf die Array-Variable zu?

Uwe Raabe 26. Nov 2009 08:48

Re: löschen von Checkboxes!
 
In deinem Code nimmst du implizit an, daß die CheckBoxes in den ersten Controls[]-Einträgen liegen. Ist das wirklich so? Wenn ja, erübrigt sich die Abfrage, ob es eine CheckBox ist.

Weiterhin bleibt wengen "while 1 < i do" der Eintrag unter Controls[0] erhalten. Wenn du nur eine Checkbox hast, ändert sich also nichts.

Das Freigeben des Objekts sollte immer über Free, statt Destroy erfolgen (sollte aber trotzdem funktionieren).

Außerdem ist dabei der TypeCast überflüssig.

uligerhardt 26. Nov 2009 08:54

Re: löschen von Checkboxes!
 
Deine while-Konstruktion ist mir suspekt. Wenn ich dich recht verstanden habe, willst du einfach eine for-Schleife. Diese durchläufst du rückwärts, weil sich ja während des Durchlaufs ControlCount ändert:
Delphi-Quellcode:
procedure TForm1.checkboxes_destroy;
var
  i: Integer;
begin
  for i := ControlCount - 1 downto 0 do
    if Controls[i] is TCheckBox then
    begin
      Controls[i].Destroy;
    end;
end;
DeddyHs Frage bezüglich der Array-Variablen führt aber wahrscheinlich zu einer besseren Lösung.

HTH,
Uli.

Angel4585 26. Nov 2009 09:24

Re: löschen von Checkboxes!
 
Ich dachte immer Destroy soll man nicht direkt aufrufen, sondern free ;)

uligerhardt 26. Nov 2009 09:30

Re: löschen von Checkboxes!
 
Zitat:

Zitat von Angel4585
Ich dachte immer Destroy soll man nicht direkt aufrufen, sondern free ;)

Man muss (wie so oft :mrgreen:) wissen, was man tut. Wenn man weiß, dass eine Objektreferenz nicht nil ist, kann man auch direkt Destroy aufrufen.

daNiii 26. Nov 2009 09:55

Re: löschen von Checkboxes!
 
danke uligerhardt!
ich habe jetzt deine Lösung verwendet und es funktioniert!

DeddyH 26. Nov 2009 09:56

Re: löschen von Checkboxes!
 
An Deiner Stelle würde ich aber mal überprüfen, ob keine Speicherlecks auftreten, was sich bei dynamisch erstellten Objekten immer empfiehlt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:24 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