Windows Forms Otwieranie Nowego Okienka - Problem

0

Od niedawna próbuję programować w Windows Forms w c++ .
W Form1 po naciśnięciu odpowiedniego przycisku mam taki kod aby wyświetlić nowe okienko:


Form2^ box = gcnew Form2();
box->ShowDialog();

a na samej górze mam oczywiście: #include "Form2.h"
I okienko wyświetla się poprawnie. Jest jednak problem, bo ja chciałbym aby po naciśnięciu tegoż przycisku otwierało się nowe okienko, ale te aktualne (Form1) zamykało się. Dawałem kod Close(); , ale albo nic się nie działo albo zamykały się obydwa okienka. Prosze o pomoc, bo ja już nie umiem sobie z tym poradzić.

0

Form1 jest zapewne głównym oknem aplikacji i zamknięcie go powoduje zamknięcie całej aplikacji. Możesz takie okno ukryć przez Hide(), albo użyć innego okna jako główne.

0

dzięki działa ;)
tylko w jakim sensie to okno jest "uktyte" ? i czy można je po naciśnieciu odpowiedniego przycisku w Form2 odkryć ?

0

Jasne, że można odkryć. Show() powinno wystarczyć ;]

0

Mam pytanie odnośnie tematu:
Mam analogiczną sytuację, chcę aby po kliknięciu na pozycję menu Nowa gra otwierało się nowe okienko (Form2). Napisałem to następująco:

private: System::Void nowaGraToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
                 Form2^ box = gcnew Form2();
                 this->Hide();
                 box->ShowDialog();
             }

No i fajnie, nowe okienko otwiera się, a to główne się chowa (Hide()), ale gdy zamykam to nowo otwarte okienko krzyżykiem, ono znika, a to główne się z powrotem nie pojawia, a widzę, że debugowanie nadal trwa. Jak sprawić, aby po naciśnięciu krzyżyka w tym nowym okienku:
a) pojawiało się z powrotem główne okno (Form1)
b) cała aplikacja zamykała się ?

0

jakbyś ten wątek przeczytał, to byś wiedział..
w zdarzeniu na zamknięcie drugiej formy daj form1->Show().

0

Czytałem. Gdzie znajdę kod zamknięcia formy?

0

Aaa, okej, dziękuję.
Napisałem coś takiego:

private: void Form2_Closed( Object^ /*sender*/, System::ComponentModel::CancelEventArgs^ e ) {
                // Form1::Show();
             }

Jednak odwołanie Form1::Show() jest niepoprawne. Najpierw pojawia się błąd, że Form1 nie jest przestrzenią nazw ani klasą, no bo w Form2.h Form1.h nie jest znane, ale gdy nawet dołączę #include "Form1.h" w tym pliku, to wtedy jest jeszcze więcej błędów kompilacji. Jak więc poprawnie z wnętrza funkcji Form2_Closed odwołać się do Form1 i to okienko wyświetlić metodą Show() ?

0

Jednak odwołanie Form1::Show() jest niepoprawne

Form1 jest klasą, a ty potrzebujesz obiektu a nie klasy (typu).

Dlatego do konstruktora Form2 musisz podać obiekt klasy Form1.

Form2^ box = gcnew Form2(this);

i zapamiętać jako pole w klasie Form2.

Błędy z inkludami to klasyczny problem ze wzajemnymi #include w nagłówkach. Podstawy C++ się kłaniają ;-)
Rozwiązaniem jest na przykład podział klasy na plik .h i .cpp.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0