2010-12-05 6 views
9

Je fais une application Win Forms pour en savoir plus car je n'ai pas beaucoup d'expérience avec elle. Dans mon programme, dans le formulaire principal, j'ai un bouton. En cliquant dessus, vous lancez un autre formulaire. Le code est le suivant:Comment faire une pause d'exécution jusqu'à ce que le nouveau formulaire soit fermé?

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

      MessageBox.Show("Oops!");    
     } 

Le problème est, quand est lancé la nouvelle forme, je veux l'exécution du code derrière la principale forme pour faire une pause à ce moment-là jusqu'à ce que la nouvelle forme est fermée. Par exemple, dans le code ci-dessus, je ne veux pas 'Oups!' pour être imprimé jusqu'à ce que le nouveau formulaire soit fermé. Comment puis-je y parvenir?

Répondre

10

Vous n'avez pas besoin d'invoquer lorsque vous êtes dans le thread d'interface utilisateur. Et vous êtes dans le thread UI dans un eventhandler de bouton-clic.

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

Vous pouvez vérifier la DialogResult pour OK, Annuler, Oui, Non, etc si votre form_NewCat met this.DialogResult à toute valeur avant la fermeture. C'est la manière habituelle de signaler comment l'utilisateur a quitté le formulaire/dialogue.

+0

merci. Je vais implémenter votre solution. – xbonez

+0

J'ai changé le gestionnaire d'événements pour exactement ce que vous avez montré. Le nouveau formulaire a un bouton d'annulation. Le gestionnaire d'événements du bouton d'annulation exécute this.Close(). Cependant, lorsque j'appuie sur le bouton d'annulation, le formulaire disparaît et réapparaît à nouveau. Frapper annuler ferme à nouveau le formulaire. Pourquoi est-ce si? Mon nouveau formulaire est affiché deux fois. – xbonez

+0

@xbonez, étrange, êtes-vous sûr de ne pas avoir d'autre code qui montre le formulaire? Comme dans le constructeur? –

5

Il suffit de modifier Show to ShowDialog; cela vous permet également d'obtenir une valeur de retour pour indiquer si le formulaire s'est considéré comme sortant avec un statut spécifique (ok, cancel, etc).

13

Modifier la ligne

NewCatForm.Show(); 

à

NewCatForm.ShowDialog(); 
6

Vous voulez une boîte de dialogue modale et je pense que vous avez besoin NewCatForm.ShowDialog();

Questions connexes