Das Problem war eigentlich, dass die MainForm der Owner der Forms war, die du löschen wolltest. So hätte es sicher funktioniert - und durch Release() anstelle Close() werden auch ausstehende Ereignisse noch bearbeitet. Ist bei deinem Test wohl nicht so wichtig, aber in echten Situationen schon:
Delphi-Quellcode:
procedure TMainForm.CloseAll;
var
i: Integer;
begin
for i := Pred(ComponentCount) downto 0 do
if Components[i] is TForm then
TForm(Components[i]).Release();
end;
procedure TMainForm.ShowButtonClick(Sender: TObject);
var
i: Integer;
begin
for i := 1 to 5 do
with TDemoForm.Create(self) do
Show;
end;
procedure TDemoForm.CloseButtonClick(Sender: TObject);
begin
MainForm.CloseAll;
end;
Grüße vom marabu