En supposant que vous êtes en demandant WinForms, vous pouvez utiliser le FormClosing() de l'événement. L'événement FormClosing() est déclenchée à tout moment, un formulaire est fermé.
Pour détecter si l'utilisateur a cliqué sur X ou votre CloseButton, vous pouvez l'obtenir par le biais de l'objet expéditeur. Essayez de lancer l'expéditeur comme un Bouton de contrôle, et de vérifier peut-être pour 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 nécessaire de différencier si X ou CloseButton a été cliqué, que je voulais réaliser quelque chose de spécifique sur la FormClosing événement, comme la fermeture de tous les MdiChildren avant la fermeture de la MDIContainerForm, ou en cas de vérification pour les modifications non enregistrées. Dans ces circonstances, nous n'avons pas besoin, selon moi, à différencier de l'un des boutons.
EDIT Fermeture par [ALT]+[F4] permet également de déclencher l'FormClosing() de l'événement, car il envoie un message à l'écran qui dit de fermer. Vous pouvez annuler l'événement, par le réglage de la
FormClosingEventArgs.Cancel = true.
Dans notre exemple, ce serait traduit en être
e.Cancel = true.
Notez la différence entre les FormClosing() et le FormClosed() des événements.
FormClosing se produit lorsque le formulaire reçu le message d'être fermé, et de vérifier si elle a quelque chose à faire avant de fermer.
FormClosed se produit lorsque le formulaire est fermé, donc après qu'il est fermé.
Cela vous aide?