Demander confirmation lorsque le bouton “X” est cliqué

Le problème est que la boîte de message avec “vous voulez vraiment fermer?” apparaît, mais lorsque je clique sur “non”, il continue à fermer le programme. Aucune suggestion? Voici mon code:

protected override void OnFormClosing(FormClosingEventArgs e) { CloseCancel(); } public static void CloseCancel() { const ssortingng message = "Are you sure that you would like to cancel the installer?"; const ssortingng caption = "Cancel Installer"; var result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) Environment.Exit(0); } 

Vous devez définir la propriété Cancel de l’argument FormClosingEventArgs sur true lorsque vous souhaitez que l’opération de fermeture soit annulée. Et un Environment.Exit(0) explicite n’est normalement pas requirejs car le formulaire est sur le point d’être fermé de quelque manière que ce soit (l’annulation du processus d’arrêt est opt-in et non opt-out).

Remplace le dernier bit par:

 var result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question); e.Cancel = (result == DialogResult.No); 

e.Cancel sur l’événement FormClosing arrêtera le processus de fermeture

  protected override void OnFormClosing(FormClosingEventArgs e) { if (CloseCancel()==false) { e.Cancel = true; }; } public static bool CloseCancel() { const ssortingng message = "Are you sure that you would like to cancel the installer?"; const ssortingng caption = "Cancel Installer"; var result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) return true; else return false; } 

il suffit de prendre les choses simples

 protected override void OnFormClosing(FormClosingEventArgs e) { base.OnFormClosing(e); if (PreClosingConfirmation() == System.Windows.Forms.DialogResult.Yes) { Dispose(true); Application.Exit(); } else { e.Cancel = true; } } private DialogResult PreClosingConfirmation() { DialogResult res = System.Windows.Forms.MessageBox.Show(" Do you want to quit? ", "Quit...", MessageBoxButtons.YesNo, MessageBoxIcon.Question); return res; } 
 protected Boolean CanClose(Boolean CanIt) { if(MessageBox.Show("Wanna close?", "Cancel Installer", MessageBoxButtons.YesNo, MessageBoxIcon.Question).ShowDialog() == DialogResult.Yes) { // Yes, they want to close. CanIt = true; } else { // No, they don't want to close. CanIt = false; } return CanIt; } protected override void OnFormClosing(FormClosingEventArgs e) { if(CanClose(false) == true) { this.Dispose(true); } else { e.Cancel = true; } } 

Je ne suis pas sûr de savoir comment gérer l’autre scénario que vous avez mentionné (gérer le clic «X»). Peut-être que vous pourriez faire quelque chose comme ça (code psuedo):

 // IF CLICKED YES THEN CLOSE // ELSE-IF CLICKED NO THEN DO NOTHING // ELSE THEN DO NOTHING 

La question est maintenant ancienne mais cette façon de procéder est plus simple et courte, et je pense que cela peut être utile à ceux qui arrivent sur cette page:

 protected override void OnFormClosing(FormClosingEventArgs e) { if (MessageBox.Show("Are you sure that you would like to cancel the installer?", "Cancel Installer", MessageBoxButtons.YesNo) == DialogResult.No) { e.Cancel = true; } } 

et utiliser ailleurs this.Close() plutôt qu’une fonction.