Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi dynamisches array mit label und textboxen zerstören ? (https://www.delphipraxis.net/106461-dynamisches-array-mit-label-und-textboxen-zerstoeren.html)

agm65 11. Jan 2008 08:31


dynamisches array mit label und textboxen zerstören ?
 
moin freunde..mal eine frage: also ich erstelle mir ein array mit label und textboxen wie folgt:
Delphi-Quellcode:
  frmParams.Label1Array[i]:= tedit.create(frmParams.Panel1);
  frmParams.Text1Array[i] := tedit.Create(frmParams.Panel2);

  frmParams.Label1Array[i].parent := frmParams.Panel1;
  frmParams.Text1Array[i].parent := frmParams.Panel2;

  frmParams.Label1Array[i].text   := slAll12.Names[i] ;
  frmParams.Text1Array[i].Text    := slAll12.ValueFromIndex[i];
wie zerstöre ich diese jetzt damit ich sie neu erstellen kann ? also wenn ich den form schließe sollen alle zerstört werden und beim neu öffnen wieder erstellt werden. weil die anzahl immer unterschieldich ist.. danke euch !

s-off 11. Jan 2008 08:33

Re: dynamisches array mit label und textboxen zerstören ?
 
Hallo,

die Objekte, die Du innerhalb des Arrays erzeugt hast, musst Du auch selber wieder zerstören.
Dazu gehst Du das Array von Low bis High durch.

Anschliessend setzt Du die Länge des Arrays auf 0.

sirius 11. Jan 2008 08:36

Re: dynamisches array mit label und textboxen zerstören ?
 
Wenn du die beiden Panels zerstörst sind auch die Edits weg.

agm65 11. Jan 2008 08:38

Re: dynamisches array mit label und textboxen zerstören ?
 
hab es mit panel1.free probiert, dann bekomme ich beim wieder öffnen einen fehler.

mkinzler 11. Jan 2008 08:39

Re: dynamisches array mit label und textboxen zerstören ?
 
Zitat:

hab es mit panel1.free probiert, dann bekomme ich beim wieder öffnen einen fehler.
Was meinst du mit Wiederöffnen?

sirius 11. Jan 2008 08:40

Re: dynamisches array mit label und textboxen zerstören ?
 
Das war ja nur eine Möglichkeit. Wir kennen ja den Aufbau deines Programmes nicht. s-off hat die am wahrscheinlichsten funktionierende Lösung gegeben.

agm65 11. Jan 2008 08:42

Re: dynamisches array mit label und textboxen zerstören ?
 
ich dachte das ich die panels im formclosequery mit .free behandel wenn ich dann wieder form.show mache bekomme ich den fehler. was läuft falsch ?

das geht auch nicht:

Delphi-Quellcode:
 for i := 0 to length(frmParams.Label1Array) - 1 do
   begin
     frmParams.Label1Array[i]:= nil;
     frmParams.Text1Array[i] := nil;
   end;
  setlength(frmParams.Label1Array,0);
  setlength(frmParams.Text1Array,0);

s-off 11. Jan 2008 08:47

Re: dynamisches array mit label und textboxen zerstören ?
 
Du kannst zwar das Item an Index x innerhalb Deines Arrays auf 'nil' setzen -> dadurch ist das eigentliche Objekt aber noch immer existent ;)

Edit: desweiteren solltest Du Dir angewöhnen, ein Array nicht von 0 bis Length - 1 durchzugehen, sondern von Low bis High.
Irgendwann erzeugst Du vielleicht mal ein Array[1..3] of irgendwas und schon hast Du ein Problem.

sirius 11. Jan 2008 08:48

Re: dynamisches array mit label und textboxen zerstören ?
 
Du erstellst das Formular nicht erst beim Anzeigen sondern es existiert im Speicher während deiner gesamten Anwendung und du hast es nur macnhmal sichtbar. Wenn du dein Panel zerstörst wird es nicht wieder erstellt. show holt das Formular nur aus dem usichtbaren in den sichtbaren Bereich.

Du solltest dir vielleicht generell überlegen, so ein Formular nur bei Benutzung zu erstellen (kann aber nicht sagen, ob das in dein Konzept passt.

z.B. so:
Delphi-Quellcode:
procedure showDialog;
var Formx:Tformx
begin
  Formx:=Tformx.create(nil);
  try
    Formx.feld1:=5; //Beispiel
    Formx.showmodal;
    editresult.text:=formx.irgendetwas; //Beispiel
  finally
    Formx.free;
  end;
end;
Edit: Und natürlich Formular Formx im Menu Projekt>Optionen>Formulare aus "auomatisch erzeugen" herausnehmen.

agm65 11. Jan 2008 08:53

Re: dynamisches array mit label und textboxen zerstören ?
 
okay ich setzte jetzt einfach die parent eigenschaft der arrays auf nil, dann gehts....

wie sieht die synatx mit der for schleife von low bis high aus ?

sirius 11. Jan 2008 08:55

Re: dynamisches array mit label und textboxen zerstören ?
 
Dann sind sie nicht mehr sichtbar, aber immernoch im Speicher. Ruf doch einfach free auf!

s-off 11. Jan 2008 08:58

Re: dynamisches array mit label und textboxen zerstören ?
 
Zitat:

Zitat von agm65
wie sieht die synatx mit der for schleife von low bis high aus ?

Delphi-Quellcode:
for i := Low(frmParams.Label1Array) to High(frmParams.Label1Array) do begin
[...]
end;

agm65 11. Jan 2008 09:07

Re: dynamisches array mit label und textboxen zerstören ?
 
also das sollte doch alles aus dem speicher löschen:

Delphi-Quellcode:
  for i := Low(frmParams.Label1Array) to High(frmParams.Label1Array) do
  begin
     frmParams.Label1Array[i].free;
     frmParams.Text1Array[i].free;
  end;

  setlength(frmParams.Label1Array,0);
  setlength(frmParams.Text1Array,0);

jetzt sieht das beim ausladen aus als würde er ein mag durchrattern ;) das geht wohl nicht anders oder ?

s-off 11. Jan 2008 09:37

Re: dynamisches array mit label und textboxen zerstören ?
 
Zitat:

Zitat von agm65
a
Delphi-Quellcode:
  for i := Low(frmParams.Label1Array) to High(frmParams.Label1Array) do
  begin
     frmParams.Label1Array[i].free;
     frmParams.Text1Array[i].free;
  end;

  setlength(frmParams.Label1Array,0);
  setlength(frmParams.Text1Array,0);

Ähm, wenn Du frmParams.Label1Array durchgehst, dann solltest Du nicht in der gleichen Schleife auf frmParams.Text1Array mit der gleichen Laufvariablen zugreifen :zwinker:

mashutu 11. Jan 2008 09:53

Re: dynamisches array mit label und textboxen zerstören ?
 
Zitat:

Zitat von s-off
Ähm, wenn Du frmParams.Label1Array durchgehst, dann solltest Du nicht in der gleichen Schleife auf frmParams.Text1Array mit der gleichen Laufvariablen zugreifen :zwinker:

Wiebitte???? Ist das neu? Ich mach das permanent und hatte da noch nie Probleme (bis D7)

DeddyH 11. Jan 2008 09:54

Re: dynamisches array mit label und textboxen zerstören ?
 
Das gibt Probleme, wenn das LabelArray mehr Elemente enthält als das TextArray.

s-off 11. Jan 2008 09:58

Re: dynamisches array mit label und textboxen zerstören ?
 
Zitat:

Zitat von DeddyH
Das gibt Probleme, wenn das LabelArray mehr Elemente enthält als das TextArray.

Oder das zweite Array nicht beim gleichen Index beginnt wie das erste...

agm65 11. Jan 2008 10:02

Re: dynamisches array mit label und textboxen zerstören ?
 
haben beide immer die gleichen !

s-off 11. Jan 2008 10:04

Re: dynamisches array mit label und textboxen zerstören ?
 
Na wenn Du das immer garantieren kannst - unsauber ist es trotzdem...

agm65 11. Jan 2008 10:06

Re: dynamisches array mit label und textboxen zerstören ?
 
hmm okay..dann ändere ich das noch.

DeddyH 11. Jan 2008 10:07

Re: dynamisches array mit label und textboxen zerstören ?
 
Zitat:

Zitat von agm65
hmm okay..dann ändere ich das noch.

Das solltest Du tun.


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