In den Projekt-Optionen - Formulare die Form2 aus der Liste nehmen, damit dieses nicht automatisch bei Programmstart erzeugt wird.
Denn hierbei passiert nix
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
// Form2 ist noch gar nicht erzeugt, darum ist das für die Katz
Form2.Free;
end;
Generell ist es geschickter folgendermassen vorzugehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Assigned( Form2 ) then
Form2.Free;
Form2 := TForm2.Create( Application );
Form2.Show;
end;
Damit das Assigned auch immer korrekt funktioniert, sollte folgender Code in Form2.OnDestroy aufgerufen werden
Delphi-Quellcode:
procedure TForm2.OnDestroy( Sender : TObject );
begin
if Form2 = Self then
Form2 := nil;
end;
Dann könnte man sich auch zwei Methoden schreiben
Delphi-Quellcode:
procedure TForm1.ZeigeForm2;
begin
if not Assigned( Form2 ) then
Form2 := TForm2.Create( Application );
Form2.Show;
end;
procedure TForm1.EntferneForm2;
begin
if Assigned( Form2 ) then
Form2.Free;
end;
Der Button zum Resetten bekommt dann folgendes:
Delphi-Quellcode:
procedure TForm1.Button1Click( Sender : TObject );
begin
EntferneForm2;
ZeigeForm2;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)