2010-05-01 15 views
15

Ich möchte das aktuelle Formular schließen, ich bin (MainForm) und dann ein zweites öffnen (Form).Schließen Sie ein Formular und rufen Sie dann ein anderes

Ich habe versucht:

private void buttonStartQuiz_Click(object sender, EventArgs e) 
{ 
    this.Close(); 

    Form2 form2 = new Form2(); 
    form2.ShowDialog(); 
} 

oder das Hinzufügen der this.Close(); nach form2.ShowDialog() auch nicht funktioniert.

Irgendwelche Hinweise?

EDIT: Könnte auch hinzufügen, dass durch Hinzufügen this.Close() nach form2.ShowDialog() es nur schließen, wenn ich das neue Formular schließe. Wenn ich stattdessen form2.Show() wähle, werden sofort beide Formulare geschlossen.

Antwort

32

ändern

this.Close(); 

An:

this.Hide(); 

Weil Sie nicht Hauptfenster schließen können und wollen Anwendung, nachdem es läuft. Sie müssen das Hauptformular ausblenden oder das Hauptfenster in das Fenster ändern, das noch geöffnet ist.

In diesem Fall müssen Sie das Hauptfenster schließen, nachdem ShowDialog() beendet wurde. Dann müssen Sie am Ende dieser Schaltfläche Event-Funktion this.Close()

Ihr Code neu Code hinzufügen: erste

private void buttonStartQuiz_Click(object sender, EventArgs e) 
    { 
     // hide main form 
     this.Hide(); 

     // show other form 
     Form2 form2 = new Form2(); 
     form2.ShowDialog(); 

     // close application 
     this.Close(); 
    } 
+0

Aber ich will es schließen. Obwohl ich denke, dass ich es verstecken konnte, wenn ich Form2 verließ, konnte ich es zurückrufen? – elvispt

+0

@elvispt: Ja, das kannst du tun. Ändern Sie dies. Schließen(); zu diesem.Show(); – Svisstack

+0

Was wäre der richtige Weg, das Versteckte (main) von form2 aufzurufen? – elvispt

-1

Sie schließen Sie das Formular, müssen Sie das zweite Formular zuerst laden.

private void buttonStartQuiz_Click(object sender, EventArgs e) 
{ 
Form2 form2 = new Form2(); 
form2.ShowDialog(); 
this.Close(); 
} 
+0

Haben Sie es getestet ?? –

6

können Sie verwirren mit Application aber das .NET Framework bereits sehr gute Unterstützung für diesen Windowing-Modus mit der WindowsFormsApplicationBase Klasse. Seine ShutdownStyle-Eigenschaft ist verfügbar, um das Programm erst herunterfahren zu lassen, nachdem das letzte Fenster geschlossen wurde. Machen Sie den Code in Program.cs wie folgt aussehen:

using System; 
using System.Windows.Forms; 
using Microsoft.VisualBasic.ApplicationServices; // Add reference to Microsoft.VisualBasic!! 

namespace WindowsFormsApplication1 { 
    class Program : WindowsFormsApplicationBase { 
    [STAThread] 
    static void Main(string[] args) { 
     var app = new Program(); 
     app.EnableVisualStyles = true; 
     app.ShutdownStyle = ShutdownMode.AfterAllFormsClose; 
     app.MainForm = new Form1(); 
     app.Run(args); 
    } 
    } 
} 
0
Form2 frm2 = new Form2(); 
frm2.ShowDialog(); 

und

this.Close(); 

ist keine gute Kombination ..

FRM2 tatsächlich laden, aber Sie können nicht einmal Sehen Sie es, weil this.Close(); jedes Formular nur in einer Millisekunde schließt ...

this.Hide(); 

funktioniert ...

0

Aktivieren oder deaktivieren Sie das Formular selbst, anstatt zu versuchen, zu schließen.

-Code es mag:

this.enabled = false; 

in dem Click-Ereignis oder wo auch immer Sie es wollen.

Ich hoffe, es hilft.

-1

Versuchen Sie folgendes:

btCancel.FindForm().Close(); 

btcancel ist eine Schaltfläche, die Sie auf dem Formular schließen möchten legt.

-1
this.Visible = false; 
Form2 form2 = new Form2(); 
form2 .ShowDialog(); 
this.Close(); 
+1

Dies stellt keine Antwort auf die Frage.Um Kritik zu kritisieren oder um Klärung von einem Autor, hinterlassen Sie einen Kommentar unter ihrem Post - Sie können Kommentieren Sie immer Ihre eigenen Beiträge und sobald Sie genügend [Reputation] (http://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (http://stackoverflow.com/) Hilfe/Privilegien/Kommentar). – dbugger

+0

aber das ist die Antwort für seine Frage Bitte versuchen Sie es bevor Sie sagen, es funktioniert nicht seine Frage war, ich möchte th schließen In der aktuellen Form bin ich auf (MainForm) und öffne dann eine zweite (Form). und das ist die Antwort dafür –

+0

Hauptsächlich müssen Sie nur sagen, was Ihr Code tut, anstatt nur Zeilen Code auszugeben. – Cullub

-2

diese

private void mainform_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      Application.Exit(); 
     } 

für mich Arbeitete in Hauptform Put.

0

Ersetzen Sie einfach this.Close(); with this.Hide(); Es wird perfekt funktionieren!

1

Dies funktioniert gut für mich ...

private void button_Name_Click(object sender, EventArgs e) 
    { 
     form_2 Form2 = new Form2(); 
     Form2.ShowDialog(); 
     this.Close(); 
    } 
+0

Während dies die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort und möglicherweise das Problem mit dem OP-Code zu erklären. – pirho

Verwandte Themen