Witam.
Temat wydawał się banalny dopóki go nie ruszyłem..
W skrócie:
-
Są formy Główna i Form2, Form3, Form4.
-
Chodzi o przejścia między formami Form2, Form3, Form4 wywoływanymi z ShowModal na zasadzie Buttonów Poprzedni, następny. A dokładniej jak zamknąć Form2 otwartej przez ShowModal z kodu Form2?
-
Chodzi o to że Form2 była otwarta przez ShowModal, ma Button Następny po kliknięciu którego chciałem zamknąć Form2 i otworzyć Form3.ShowModal jak w poniższym przykładzie. I tak przechodzić pomiędzy formami.
var
Form1: TForm1;
implementation
Uses
Unit2,Unit3,Unit4;
{$R *.dfm}
procedure TForm1.Button_StartShowModalClick(Sender: TObject);
begin
Form2.ShowModal;
end;
var
Form2: TForm2;
implementation
Uses
Unit3,Unit4;
{$R *.dfm}
procedure TForm2.Button_NastepnyClick(Sender: TObject);
begin
Form2.Close;
Form3.ShowModal;
end;
var
Form3: TForm3;
implementation
Uses
Unit2,Unit4;
{$R *.dfm}
procedure TForm3.Button_NastepnyClick(Sender: TObject);
begin
Form3.Close;
Form4.ShowModal;
end;
procedure TForm3.Button_PoprzedniClick(Sender: TObject);
begin
Form3.Close;
Form2.ShowModal;
end;
var
Form4: TForm4;
implementation
Uses
Unit2,Unit3;
{$R *.dfm}
procedure TForm4.Button_PoprzedniClick(Sender: TObject);
begin
Form4.Close;
Form3.ShowModal;
end;
To już tak obrazowo.
-
Oczywiście w tej postaci Forma zamykana nie znika a pojawia się forma otwierana. Przez co potem nie można wrócić bo wyskakuje błąd, że nie można pokazać formy która już jest widoczna - to wiadomo.
-
Jakby ktoś pytał o Form.Show to chciałbym tego właśnie uniknąć bo program ma być odporny na błędy a na formie głównej są ustawienia które wolałbym mieć niedostępne w momencie gdy się obsługuje Form2 - Form4. Dlatego aktywna ShowModal jest najwygodniejszym rozwiązaniem.
-
Gdzieś po drodze były pomysły w stylu zmiana trybu ShowModal ale trzeba to jeszcze umieć przetrawić, wiec zaglądanie do kodu procki i testowanie pojedynczych linii w stylu
procedure TForm2.Button_NastepnyClick(Sender: TObject);
begin
Exclude(Form2.FFormState, fsShowing);
Form2.Close;
Form3.ShowModal;
end;
nie pomaga
co ciekawe znalazłem coś takiego i też nic
procedure TForm2.Button_NastepnyClick(Sender: TObject);
begin
Form2.CloseModal; // zamiana kolejności też nie pomogła
Form3.ShowModal;
end;
Co tu dużo pisać ... utknąłem.
poprawienie tagów wątku - furious programming