Comment puis-je changer ce qui se passe lorsqu'un utilisateur clique sur le bouton de fermeture (X rouge) dans une application Windows Forms (en C #)?
Réponses
Trop de publicités?Pour cela, vous pouvez remplacer OnFormClosing . Veillez simplement à ne rien faire de trop inattendu, car cliquer sur le 'X' pour fermer est un comportement bien compris.
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
if (e.CloseReason == CloseReason.WindowsShutDown) return;
// Confirm user wants to close
switch (MessageBox.Show(this, "Are you sure you want to close?", "Closing", MessageBoxButtons.YesNo))
{
case DialogResult.No:
e.Cancel = true;
break;
default:
break;
}
}
Remplacer le OnFormClosing méthode.
ATTENTION: Vous devez vérifier la CloseReason et seulement modifier le comportement si elle est UserClosing. Vous ne devriez pas mettre quelque chose ici qui pourrait bloquer l'arrêt de Windows, de la routine.
L'Arrêt de l'Application des Modifications apportées dans Windows Vista
C'est à partir du logo Windows 7 exigences du programme:
Une chose qui manque à ces réponses, et que les débutants recherchent probablement, est qu’il est agréable d’avoir un événement:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// do something
}
Cela ne fera rien du tout, sauf si vous enregistrez l'événement. Mettez ceci dans le constructeur de la classe:
this.FormClosing += Form1_FormClosing;
Soit remplacer le OnFormClosing ou de vous inscrire pour l'événement FormClosing.
Ceci est un exemple de substitution de la OnFormClosing fonction dans le dérivé de la forme:
protected override void OnFormClosing(FormClosingEventArgs e)
{
e.Cancel = true;
}
Ceci est un exemple de la gestionnaire de l'événement pour arrêter la forme de fermeture qui peut être dans toute la classe:
private void FormClosing(object sender,FormClosingEventArgs e)
{
e.Cancel = true;
}
Pour obtenir plus avancé, cochez la CloseReason bien sur la FormClosingEventArgs à assurer que l'action est effectuée. Vous voudrez peut-être que ne l'alternative de l'action si l'utilisateur essaie de fermer le formulaire.
comme l'a dit Jon B, mais vous voudrez également vérifier les ApplicationExitCall
et TaskManagerClosing
CloseReason:
protected override void OnFormClosing(FormClosingEventArgs e)
{
if ( e.CloseReason == CloseReason.WindowsShutDown
||e.CloseReason == CloseReason.ApplicationExitCall
||e.CloseReason == CloseReason.TaskManagerClosing) {
return;
}
e.Cancel = true;
//assuming you want the close-button to only hide the form,
//and are overriding the form's OnFormClosing method:
this.Hide();
}