Hallo,
klingt auch logischer.
Aber was hast Du denn eigentlich vor, was passiert in FormShow, so dass Dich die wiederholten Aufrufe stören. Könntest Du eventuell hinter dem Create einen Schalter setzten, bei dem FormShow nichts macht, wenn er gesetzt ist?
Delphi-Quellcode:
FoMain := TFoMain.Create(self);
FoMain.bNixdaFormShow := True;
FoMain.FormStyle := fsNormal;
FoMain.Visible := False;
FoMain.bNixdaFormShow := False;
FoMain.ShowModal;
...
...
...
FoMain := TFoMain.Create(self);
FoMain.bNixdaFormShow := True;
FoMain.FormStyle := fsMDIChild;
FoMain.bNixdaFormShow := False;
FoMain.Visible := True;
...
procedure TFoMain.FormShow(Sender: TObject);
begin
if bNixdaFormShow then exit;
...
end;
Ob das jetzt elegant ist, lassen wir mal dahingestellt.
Alternativ könntest Du aber auch, sofern ein Formular nur einmal angezeigt wird, im FormShow ein Attribut setzen, alá ist schon durchlaufen, und wenn das gesetzt ist, macht FormShow bei weiteren Aufrufen nichts mehr.
Delphi-Quellcode:
FoMain := TFoMain.Create(self);
FoMain.bFormShowAbgearbeitet := False;
...
procedure TFoMain.FormShow(Sender: TObject);
begin
if bFormShowAbgearbeitet then Exit;
bFormShowAbgearbeitet := True;
...
end;
Oder gibt es eventuell ein Ereignis, dass für die Erledigung Deiner Aufgabe eventuell besser geeignet ist, als FormShow?