Jak zamknąć Form główne pozostawiając pozostałe otwarte

0

Witam

Mam aplikację w której w pierwszym Form1 mam stworzony "mechanizm" logowania. Po wprowadzeniu danych do texbox i kliknięciu button jeśli dane są zgodne z danymi w bazie następuje otwarcie drugiego Form2 który chciałbym traktować od tego momentu jako Form główne. Dodatkowo po drodze przekazuję wartość zmiennej z Form1 do Form2.
Moje pytanie - jak zrobić żeby po zalogowaniu otworzyć Form2 zamykając jednocześnie Form1.
W tej chwili mam taki fragment kodu odpowiedzialny za wywołanie nowego okna w button_Click

 if (haslo_baza == haslo_wpisane)
                    {                        
                        frm_glowne glowne = new frm_glowne();
                        glowne.IDOperatora_zalogowanego = this.IDOperatora;
                        glowne.Show();
                    }

Spróbowałem za

glowne.Show();

dodać this.Close();

 ale to powoduje że zamyka się cała aplikacja. 
Jakieś sugestie gdzie leży błąd i jak go naprawić ?
0
Hide();
0

Działa ale nie do końca rozwiązuje problem - okno zostaje schowane w tle. W zamykaniu aplikacji muszę pamiętać o zamknięciu ukrytego okna gdyż inaczej aplikacja dalej wisi w tle. Jak uniknąć ludzkiego błędu w postaci takiej że w jednej z przewidzianych opcji zamykania aplikacji (chodzi mi o Form2 które traktuje jako główne) zapomnę dodać zamykanie ukrytego Form1? Czy jest na to jakiś prosty sposób niż zmiana że Form2 będzie głównym uruchamianym na starta aplikacji który zostanie wpierw ukryty, zostanie wywołane Form1 do logowania i jak logowanie będzie ok to wtedy Form2 zostanie "ujawniony" ??

0

Jak zamkniesz główne okno to zamyka się aplikacja - to chyba logiczne. Co natomiast mniej logiczne to zaadoptowanie głównego okna na okno logowania... Okno logowania to ma być dodatkowe okno. BTW otwierasz pliczek program.cs, dodajesz przed Application.Run obsługę logowania a jako główną ustawiasz tą, która ma być główna

0

Eee.. to już lepiej w głównej formie w Form.Load (uruchamia się PRZED pokazaniem okna) otworzyć drugą formę, poczekać na jej zamknięcie (można zrobić ShowDialog) i dopiero pokaże się główna forma.

0

tylko, że jak się user nie zaloguje to i tak wtedy musisz główną pokazać. A jak pokażesz okienko logowania ZANIM stworzysz główną to możesz spokojnie po prostu zamknąć aplikację bez migania formami przed userem

0

Ostatecznie zrobiłem tak:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

frm_logowanie logowanie = new frm_logowanie();
Application.Run(logowanie);

if (logowanie.zalogowano)
{
     Application.Run(new frm_glowne());
}

a w odpowiednim miejscu frm_logowanie:

if (haslo_baza == haslo_wpisane)
                    {                        
                        zalogowano=true;
                        Zmienne.IDOperatora_zalogowanego = this.IDOperatora;
                        this.Close();
                    }

i działa tak jak chciałem :)

Dzięki za pomoc

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