75 votes

Comment prévenir ou bloquer la fermeture d'une fenêtre WinForms?

Comment puis-je empêcher la fermeture de la fenêtre en affichant une MessageBox? (Technologie : WinForms avec C#)

Lorsque l'événement de fermeture se produit, je veux que le code suivant soit exécuté :

private void addFile_FormClosing( object sender, FormClosingEventArgs e ) {
    var closeMsg = MessageBox.Show( "Voulez-vous vraiment fermer?", "Avertissement", MessageBoxButtons.YesNo, MessageBoxIcon.Question );

    if (closeMsg == DialogResult.Yes) {
        //fermer le formulaire addFile
    } else {
        //ignorer l'événement de fermeture
    }
}

152voto

Victor Points 4812
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
    var window = MessageBox.Show(
        "Fermer la fenêtre?",
        "Êtes-vous sûr?",
        MessageBoxButtons.YesNo);

    e.Cancel = (window == DialogResult.No);
}

34voto

BlueM Points 2453

Attrapez l'événement FormClosing et définissez e.Cancel = true

private void AdminFrame_FormClosing(object sender, FormClosingEventArgs e)
{
    var res = MessageBox.Show(this, "Voulez-vous vraiment quitter?", "Quitter",
            MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
    if (res != DialogResult.Yes)
    {
      e.Cancel = true;
      return;
    }
}

9voto

Lars I Nielsen Points 81

Une touche spéciale pourrait être d'empêcher toujours simplement l'utilisateur de fermer le formulaire :

private void Frm_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = (e.CloseReason == CloseReason.UserClosing); 
    // désactiver la fermeture du formulaire par l'utilisateur, mais pas par les autres
}

7voto

Randolf R-F Points 8767

Au sein de votre événement OnFormClosing, vous pouvez afficher la boîte de dialogue et if la réponse est fausse (pour ne pas l'afficher), alors définissez la propriété Cancel de EventArgs à true.

3voto

D Stanley Points 54768

Tiré directement de MSDN:

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   // Déterminer si le texte a changé dans la zone de texte en le comparant au texte d'origine. 
   if (textBox1.Text != strMyOriginalText)
   {
      // Afficher un MsgBox demandant à l'utilisateur de sauvegarder les modifications ou d'annuler. 
      if(MessageBox.Show("Voulez-vous enregistrer les modifications apportées à votre texte?", "Mon application",
         MessageBoxButtons.YesNo) ==  DialogResult.Yes)
      {
         // Annuler l'événement de fermeture du formulaire.
         e.Cancel = true;
         // Appeler la méthode pour enregistrer le fichier...
      }
   }
}

Dans votre cas, vous n'avez pas besoin de faire quoi que ce soit pour fermer explicitement le formulaire. Sauf si vous l'annulez, il se fermera automatiquement, donc votre code serait:

private void addFile_FormClosing( object sender, FormClosingEventArgs e ) {
    var closeMsg = MessageBox.Show( "Voulez-vous vraiment fermer?", "Avertissement", MessageBoxButtons.YesNo, MessageBoxIcon.Question );

    if (closeMsg == DialogResult.Yes) {
        // ne rien faire
    } else {
        e.Cancel = true;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X