2010-08-20 8 views
3

J'ai un formulaire dans une application WinForms. Quand j'appuie sur un bouton, il charge une boîte de message modale avec les options oui et non.Fermeture de la boîte de dialogue et du formulaire qui a lancé la boîte de dialogue

C'est très bien, mais quand j'appuie sur non, je veux fermer à la fois la boîte de dialogue et le formulaire où se trouve le bouton qui a lancé la boîte de dialogue (l'expéditeur).

Ainsi, la structure de l'application est comme ceci:

fenêtre principale application> presse élément de menu pour lancer une nouvelle forme (configuration de connexion)> bouton de presse sur ce formulaire pour ouvrir la boîte de message.

Deux fenêtres sont ouvertes (formulaire de configuration de connexion et boîte de dialogue), que je veux toutes deux fermées.

Comment est-ce que je pourrais faire ceci?

Répondre

16

Dans votre oui aucune forme modale, vient de mettre DialogResult-Pas lorsque vous appuyez sur le bouton Non, comme:

private void noButton_Click(object sender, EventArgs e) 
{ 
    this.DialogResult = System.Windows.Forms.DialogResult.No; 
} 

et le formulaire modal se fermera automatiquement lorsque vous cliquez sur Non

Ensuite, lorsque vous ouvrez votre formulaire modal faire quelque chose comme ceci (sous forme de configuration de connexion):

var modalForm = new YesNoForm(); 
if (modalForm.ShowDialog() == DialogResult.No) 
{ 
    this.Close(); // close the connection setup form 
} 

EDIT

Je pensais que votre oui aucune forme modale était la coutume, si elle est un MessageBox simple, il suffit de faire:

var dlgResult = MessageBox.Show("Yes or no ?","?",MessageBoxButtons.YesNo); 
if(dlgResult == System.Windows.Forms.DialogResult.No) 
{ 
    this.Close(); // close the connection setup form 
} 

comme déjà suggéré dans d'autres réponses

0

Je don Je ne sais pas si C# a le même comportement, mais en Java, je modifie le constructeur de la boîte de message, et passe une référence au formulaire de l'expéditeur.

MBox1 = New MBox(ParentForm sender); 

Puis, dans la boîte de message que vous pouvez faire:

sender.close(); //or whatever 
this.close(); 

Les exemples sont plus "pseudo-like" mais j'espère que cela aide

2

Quelque chose comme ceci:

DialogResult result = MessageBox.Show("dialog", "modal", MessageBoxButtons.YesNo); 
if (result == DialogResult.No) 
{ 
     this.Close(); 
} 

Pour les boîtes de dialogue modales personnalisées, le code sera similaire.

2
private void newToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (richTextBox1.Text != "") 
     { 

      if (DialogResult.Yes == MessageBox.Show(("Do you want to save changes to Untiteled"), "Notepad", MessageBoxButtons.YesNoCancel)) 
      { 

       saveFileDialog1.ShowDialog(); 
       FileStream fs = new FileStream(saveFileDialog1.FileName + ".txt", FileMode.Append); 
       StreamWriter sw = new StreamWriter(fs); 
       sw.WriteLine(richTextBox1.Text); 
       sw.Close(); 
       fs.Close(); 

      } 
      else if (DialogResult.No == MessageBox.Show(("Do you want to save changes to Untiteled"), "Notepad", MessageBoxButtons.YesNoCancel)) 
      { 

       richTextBox1.Clear(); 

      } 
      else if (DialogResult.Cancel == MessageBox.Show(("Do you want to save changes to Untiteled"), "Notepad", MessageBoxButtons.YesNoCancel)) 
      { 


       ***//when i click on cancel button...the dialogbox should be close??????????????????????*** 
      } 

     } 
     else 
     { 
      richTextBox1.Clear(); 
     } 

    } 
Questions connexes