Autor Beitrag
JoBoCAD
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Mi 11.04.18 12:43 
Hallo Zusammen,


Über die Procedure text_boxen_ein erstelle ich beliebig viele Editfelder auf einem Form.
Bei Bedarf möchte ich über die Procedure text_boxen_aus die Komponenten zur Laufzeit löschen.

Allerdings wird aktuell nur die letzte Komponenten gelöscht.
Kann mir jemand erklären worin mein Fehler besteht.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
procedure text_boxen_ein;
var
i,count:integer;
begin
    SetLength(form3.EditArray, Count);
    for i:=1 to strtoint(form3.Label2.Caption) do
    begin
      form3.EditArray[i] := TEdit.Create(form3);
      form3.EditArray[i].Parent := Form3;
      form3.EditArray[i].Left := 150;
      form3.EditArray[i].Height:=17;
      form3.EditArray[i].Top := 20 + ((form3.EditArray[i].Height + 2) * i);
    end;
end;



procedure text_boxen_aus;
var
i:integer;

begin


    for i:=1 to strtoint(form3.Label2.Caption) do
    begin
        form3.EditArray[i].Destroy;
    end;

end;


Gruß
Jo

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2231
Erhaltene Danke: 416

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mi 11.04.18 13:05 
Guten Tag JoBoCAD,

deine Problemchen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
  i,count:integer;
begin
  SetLength(form3.EditArray, Count);            // "Count" ist bis dato undefiniert bzw. hat keinen bestimmten Wert.
  for i:=1 to strtoint(form3.Label2.Caption) do // Das Array beginnt bei "0", nicht von "1", außerdem ...
                                                // ... ist "strtoint(form3.Label2.Caption)" Quatsch. Dieser Wert sollte in einer Variable vorliegen, nicht in einem Control.
  form3.EditArray[i] := TEdit.Create(form3);    // Das Array bekommt den Owner "form3" zugewiesen, heißt, "form3" kümmert sich eigenständig um die Freigabe des Array
  //...
end;

//...
for i:=1 to strtoint(form3.Label2.Caption) do    // Wie schon bereits erwähnt
begin 
  form3.EditArray[i].Destroy;                    // Die Freigabe erfolgt mit ".Free()" statt ".Destroy()". "Free()" ruft nebenbei auch "Destroy()" auf.
end;

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
JoBoCAD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Mi 11.04.18 14:16 
Danke für die Infos.
Ich habe die Korrekturen vorgenommen.
Brachte keinen Erfolg.
Ich arbeite noch mit Delphi XE4.
Vermutlich liegt es daran.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2231
Erhaltene Danke: 416

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mi 11.04.18 15:28 
Nö, ganz bestimmt nicht. Leider liegt das Problem am Entwickler selbst. Wie sieht das korrigierte Beispiel nun aus?

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)