En supposant que vous demandez WinForms, vous pouvez utiliser l' événement FormClosing () . L'événement FormClosing () est déclenché à chaque fois qu'un formulaire doit se fermer.
Pour détecter si l'utilisateur a cliqué sur X ou sur votre CloseButton, vous pouvez l'obtenir via l'objet expéditeur. Essayez de convertir l'expéditeur en contrôle Button et vérifiez peut-être son nom "CloseButton", par exemple.
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
if (string.Equals((sender as Button).Name, @"CloseButton"))
// Do something proper to CloseButton.
else
// Then assume that X has been clicked and act accordingly.
}
Sinon, je n'ai jamais eu besoin de différencier si X ou CloseButton a été cliqué, car je voulais effectuer quelque chose de spécifique sur l'événement FormClosing, comme fermer tous les MdiChildren avant de fermer le MDIContainerForm, ou vérifier l'événement pour les modifications non enregistrées. Dans ces circonstances, nous n'avons pas besoin, selon moi, de nous différencier des deux boutons.
La fermeture par ALT+ F4déclenchera également l'événement FormClosing (), car il envoie un message au formulaire indiquant de fermer. Vous pouvez annuler l'événement en réglant le
FormClosingEventArgs.Cancel = true.
Dans notre exemple, cela se traduirait par
e.Cancel = true.
Notez la différence entre les événements FormClosing () et FormClosed () .
FormClosing se produit lorsque le formulaire a reçu le message à fermer et vérifiez s'il a quelque chose à faire avant qu'il ne soit fermé.
FormClosed se produit lorsque le formulaire est effectivement fermé, donc après sa fermeture.
est-ce que cela aide?