Réglage par programme closereason
Je veux mettre le CloseReason d'un formulaire après que je l'appelle.Close() à l'intérieur de la forme.
Généralement, cette forme est fermée par lui-même à l'appel de Cette.Close(), mais je veux demander à l'utilisateur si ils veulent VRAIMENT pour fermer le formulaire, et envoyez une mbox avec quelques infos. Mais j'ai ceci:
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
if (MessageBox.Show("¿Desea Salir realmente?\nLa factura aun no ha sido pagada por lo que volverá a la pantalla anterior y podrá seguir agregando productos") == DialogResult.No)
{
e.Cancel = true;
}
}
base.OnFormClosing(e);
}
Mais à chaque fois que je l'appelle.Close(); le CloseReason est toujours UserClosing.
Puis-je le mettre après l'appel ou je dois gérer le OnFormClosing différents?
- BTW: MessageBox.show() est incomplète parce que je l'ai écrit ici, pas de VS
- J'ai également constaté que la CloseReason pour appeler le Formulaire.Close() semble toujours être UserClosing. C'est un peu idiot car UserClosing il vraiment que surviennent lorsque l'utilisateur cliquait sur le bouton fermer, sélectionner fermer à partir du menu système, ou Alt+F4 est la forme.
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que vous pouvez faire, ce que je fais toujours, c'est d'utiliser un drapeau
Et ensuite, vérifiez que:
Plutôt que de créer de la variable supplémentaire:
Vous pouvez appeler le:
Puis e.CloseReason sera égal à
Qui pourrait être ce que vous êtes après.
La façon dont j'ai commencé à faire c'est de définir la propriété DialogResult de la forme de différents éléments en fonction de ce que l'utilisateur a cliqué sur le formulaire.
Dans votre clic sur un bouton de la méthode:
De cette façon, vous pouvez effectuer les opérations suivantes dans le FormClosing méthodes:
Autant que la CloseReason toujours être mis à UserClosing, il est fixé à cette valeur par les actions qu'un utilisateur peut lancer, ne me souviens pas exactement de quoi, mais je suis sûr que même un gestionnaire de tâches de la force de tuer est à l'utilisateur de clôture. Cependant, je peux confirmer les autres valeurs enum sont fixées dans les différents cas, comme un arrêt/redémarrage, tandis que l'application est toujours en cours d'exécution. Vous pouvez même arrêter de windows arrêter par la capture de TOUTES proches les raisons de l'interrupteur et de l'annulation de la fermer.
CloseReason est un enum avec les membres suivants:
Qui m'amène à croire qu'il est tributaire des conditions liées au comportement des formes en général (ex. la fermeture d'un formulaire parent ferme c'est childs). Donc, pour le arg avoir dire, le CloseReason.ApplicationExitCall, l'événement doit être déclenché à partir d'une Application.La sortie de call.
Même à dire un CloseReason.FormOwnerClosing, en supposant que votre enfant formulaires sont appelés à l'aide du formulaire.Show(Parent)
Si votre objectif est simplement d'avoir des informations supplémentaires de pourquoi la forme est en cours de fermeture, vous pouvez tout simplement les stocker à l'intérieur de la forme de l'objet comme un attribut public ou une propriété pour y accéder plus tard, en supposant que cette formule n'était pas disposé.
De fournir quelle a été votre motivation dans l'évolution de la CloseReason serait probablement vous aider, en tant que bien.
CloseReason page msdn pour référence
http://msdn.microsoft.com/en-us/library/system.windows.forms.closereason.aspx