2010-12-05 12 views
9

Ich mache eine Win Forms-Anwendung, um mehr zu lernen, da ich nicht viel Erfahrung damit habe. In meinem Programm habe ich im Hauptformular einen Knopf. Wenn Sie darauf klicken, wird ein anderes Formular geöffnet. Der Code lautet wie folgt:Wie kann ich die Ausführung unterbrechen, bis das neue Formular geschlossen wird?

private void btn_AddCat_Click(object sender, EventArgs e) 
     { 
      this.Invoke(new MethodInvoker(() => 
      { 
       form_NewCat NewCatForm = new form_NewCat(); 
       NewCatForm.Show(); 
      })); 

      MessageBox.Show("Oops!");    
     } 

Das Problem ist, wenn die neue Form gestartet wird, möchte ich die Ausführung des Codes hinter dem Hauptformular an diesem Punkt anzuhalten, bis die neue Form geschlossen ist. Als Beispiel möchte ich im obigen Code nicht 'Ups!' gedruckt werden, bis das neue Formular geschlossen ist. Wie kann ich das erreichen?

Antwort

10

Sie müssen nicht aufrufen, wenn Sie sich im UI-Thread befinden. Und Sie befinden sich im UI-Thread in einem Button-Click-Eventhandler.

private void btn_AddCat_Click(object sender, EventArgs e) 
{ 
    form_NewCat NewCatForm = new form_NewCat(); 
    var dialogResult = NewCatForm.ShowDialog(); 
    MessageBox.Show("Oops!");    
} 

Sie können den Dialog für OK überprüfen, Abbrechen, Ja, Nein, etc, wenn Ihr form_NewCat vor dem Schließen this.DialogResult auf einem beliebigen Wert festlegt. Dies ist die übliche Art zu signalisieren, wie der Benutzer das Formular/den Dialog verlassen hat.

+0

Dank. Ich werde Ihre Lösung implementieren. – xbonez

+0

Ich habe den Event-Handler auf genau das geändert, was Sie gezeigt haben. Das neue Formular hat eine Abbrechen-Schaltfläche. Der Event-Handler für den Cancel-Button führt dies aus.Close(). Wenn ich jedoch auf die Abbrechen-Schaltfläche klicke, verschwindet das Formular und erscheint wieder. Wenn Sie den Vorgang erneut abbrechen, wird das Formular geschlossen. Warum ist das so? Mein neues Formular wird zweimal angezeigt. – xbonez

+0

@xbonez, seltsam, bist du sicher, dass du keinen anderen Code hast, der das Formular anzeigt? Wie im Konstruktor? –

5

Ändern Sie einfach Show ShowDialog; Dadurch erhalten Sie auch einen Rückgabewert, um anzugeben, ob das Formular mit einem bestimmten Status beendet wurde (OK, Abbrechen usw.).

13

ändern Sie die Zeile

NewCatForm.Show(); 

zu

NewCatForm.ShowDialog(); 
6

wollen Sie einen modalen Dialog, und ich glaube, Sie brauchen NewCatForm.ShowDialog();

Verwandte Themen