Wann wird dein Formular freigegeben? Ich vermute garnicht, sondern es wird nur versteckt und somit belieben die Komponenten von FormDialog erhalten und Du versuchst beim zweiten Aufruf die selben Komponenten mit dem gleichen Name in das immer noch bestehende Formular einzubauen.
Delphi-Quelltext
1: 2: 3:
| with MyLabel do begin MyLabel := TLabel.Create(FormDialog); |
Das ist höchst bedenklich. Da machst ein with auf einer eventuell bestehenden Variabel und weist sie um with-Abschnitt erneut zu?
Ändere die Erstellung wie folgt ab:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure ErstelleEdits(CtrlClass : TWinControlClass; const Name: String; Links, Oben, Breite, Hoehe : Integer); begin with CtrlClass.Create(FormDialog) do begin Parent := FormDialog; Name := Classname + '_' + Name; Height := Hoehe; Width := Breite; Left := Links; Top := Oben; end; end; |
Mit dieser Funktion kannst Du alle deine Controls erstellen, ohne eine Fallunterscheidung machen zu müßen. Aufgerufen wird das mit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| FormDialog.Components.Clear;
ErstelleEdits(TLabel, '1', 10, 10 100, 20); ErstelleEdits(TEdit, '1', 10, 30 100, 20); ErstelleEdits(TCombobox, '1', 60, 30 100, 20); |
Wenn Du ein Formular schliesst, z. B. mit Close oder über die im Formular angezeigten Buttons, dann werden diese nicht freigegeben, sondern erst dann wenn Du das Formular mit FormDialog.Free entsorgst. Bitte schau in der Delphi Hilfe über OnClose - nach. Dort ist beschrieben, wie sich ein Formular verhalten soll.
Gruß
KidPaddle