Form1 schließen nach öffnen von Form2



  • Hallo zusammen,

    ich bin ein Neuling bei C# und habe bei meinem Programm folgendes Problem:

    Ich möchte ein Programm schreiben, welches durch eine Benutzer- und Passworteingabe geschützt ist.

    Ich habe nun 2 Windows-Forms erstellt und in der ersten mache ich die Passwortabfrage und rufe dann die zweite auf, in der dann sich das Hauptprogramm befindet. Allerdings hätte ich gerne, dass sich die erste dann schließt und nicht im Hintergrund noch offen bleibt.

    Wie kann ich das realisieren???

    Vielen Dank für eure Mühen schon im Voraus!

    Gruß

    firechris



  • Am besten, du entkoppelst beide Forms und rufst sie nur nacheinander in der Main-Methode auf:

    static void Main()
    {
      PasswordDlg dlg = new PasswordDlg();
    
      if(dlg.ShowDialog() == DialogResult.OK)
      {
        // ...
        Application.Run(new MainForm());
      }
    }
    

    Durch das ShowDialog wird das erste Fenster solange angezeigt, bis es vom Anwender beendet wird. Und nur bei OK wird dann die MainForm angezeigt.

    Du solltest dann zwei Buttons 'OK' und 'Abbrechen' dort darauf packen und jeweils die Eigenschaft 'DialogResult' entsprechend zuweisen (OK bzw. Cancel).



  • Also was ich jetzt verstanden habe ist, dass ich nicht mehr mit der einen die andere Form aufrufen soll. Das soll über die Main laufen.

    [cs]PasswordDlg dlg = new PasswordDlg();

    Damit ruft er doch meine Form auf, in der ich die Passwortabfrage mache, oder?

    Allerdings weis ich noch nicht, wie ich in die ganze Geschichte jetzt meine beiden Forms einbinden soll.

    Könntest du da bitte für einen absoluten Anfänger, der einen Nichtsnutz als Dozenten hat, noch etwas genauer werden?

    Vielen Dank!



  • Du kannst, wenn das Passwort richtig eingegeben wurde ein Objekt von dem zweiten Fenster erstellen und dieses mit Show aufrufen und anschließend das erste mit Close schließen.

    [cs]
    // Passworteingabe war OK (wir sind in einer Methode)
    
    Fenster2 fenster = new Fenster2();
    fenster.Show();
    this.Close();
    
    // Methode geht noch weiter oder endet hier
    [/cs]
    


  • @Gamester:

    if (sBenutzer == "admin" && sPasswort == "admin")
                {
                    Form2 form2 = new Form2();
                    form2.Show();
                    this.Close();
                }
    

    Genau diesen Text habe ich als Anweisung im Quelltext meiner Form1 stehen. Jedoch schließt sich dann nicht die Form1, sondern das ganze Programm.

    Woran kann das liegen?



  • this.Hide();
    

    Das Fenster verschwindet, aber es existiert noch weiter. D.h., dass man es später z.B. noch weiterverwenden könnte. Wenn du die Hauptform schließt, wird das ganze Programm beendet.



  • FreakY<3Cpp schrieb:

    this.Hide();
    

    Das Fenster verschwindet, aber es existiert noch weiter. D.h., dass man es später z.B. noch weiterverwenden könnte. Wenn du die Hauptform schließt, wird das ganze Programm beendet.

    VIELEN DANK! Genau dieser Befehl hat mir gefehlt! Jetzt läuft das so, wie ich das haben möchte! 👍 🙂



  • Hallo nochmal,

    leider läuft das doch nicht so, wie ich das haben möchte, habe ich eben erst gemerkt.

    Wenn ich das auf diese Art und Weise mache, dann ruft er mir eine neue Form2 auf. Er soll aber die Form2 aufrufen, die ich im Programm erstellt und bearbeitet habe.

    Gibt es da auch einen Befehl?



  • Ich favorisiere die Loesung von Th69. Zwei getrennte Form-Klassen werden so instantiiert, dass sie genau das machen was Du moechtest.

    In Visual Studio z.B. eine Konsolenanwendung erstellen, dann hast Du die statische Main methode. Du fuegst eine Windows-Forms-Referenz hinzu und danach zwei Windows-Forms-Klassen, Passwortabfrage und Hauptfenster, zu Deinem Konsolenprojekt. Alles weitere siehe oben.


Log in to reply