AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

löschen von Checkboxes!

Ein Thema von daNiii · begonnen am 26. Nov 2009 · letzter Beitrag vom 26. Nov 2009
Antwort Antwort
daNiii

Registriert seit: 10. Nov 2008
98 Beiträge
 
Turbo Delphi für Win32
 
#1

löschen von Checkboxes!

  Alt 26. Nov 2009, 08:32
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: löschen von Checkboxes!

  Alt 26. Nov 2009, 08:36
Wieso greifst Du dann nicht direkt auf die Array-Variable zu?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#3

Re: löschen von Checkboxes!

  Alt 26. Nov 2009, 08:48
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.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#4

Re: löschen von Checkboxes!

  Alt 26. Nov 2009, 08:54
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.
Uli Gerhardt
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#5

Re: löschen von Checkboxes!

  Alt 26. Nov 2009, 09:24
Ich dachte immer Destroy soll man nicht direkt aufrufen, sondern free
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#6

Re: löschen von Checkboxes!

  Alt 26. Nov 2009, 09:30
Zitat von Angel4585:
Ich dachte immer Destroy soll man nicht direkt aufrufen, sondern free
Man muss (wie so oft ) wissen, was man tut. Wenn man weiß, dass eine Objektreferenz nicht nil ist, kann man auch direkt Destroy aufrufen.
Uli Gerhardt
  Mit Zitat antworten Zitat
daNiii

Registriert seit: 10. Nov 2008
98 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: löschen von Checkboxes!

  Alt 26. Nov 2009, 09:55
danke uligerhardt!
ich habe jetzt deine Lösung verwendet und es funktioniert!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: löschen von Checkboxes!

  Alt 26. Nov 2009, 09:56
An Deiner Stelle würde ich aber mal überprüfen, ob keine Speicherlecks auftreten, was sich bei dynamisch erstellten Objekten immer empfiehlt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 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