2009-03-18 11 views
0

J'utilise des contrôles qui piègent la validation lorsque quelque chose se produit, y compris lorsque les utilisateurs appuient sur le bouton de sortie. Est-il possible de dire si le bouton de sortie a été enfoncé?.Formulaires WinDind si le bouton Quitter a été enfoncé

+0

Veuillez définir "Bouton de sortie". –

+0

Voulez-vous dire fournir un mécanisme pour arrêter l'utilisateur par le biais d'un message du genre "fermer ce formulaire annulera toute mise à jour ou tout ajout?" – Chris

Répondre

1

Merci à tous. J'ai trouvé une solution qui évitait cela complètement. J'essayais d'utiliser la fonctionnalité Infragistics LimitToList d'une liste déroulante. Cependant, cette fonctionnalité empêche TOUS les autres événements de se déclencher, y compris la fermeture de formulaire! Pour contourner le problème, je pensais vérifier si le bouton de sortie était enfoncé dans la fonction LimitToList, puis désactiver LimitToList pour permettre la sortie. J'ai donc commencé à vérifier ActiveControl, yada, yada, mais j'ai rencontré beaucoup de problèmes (que se passe-t-il si un autre formulaire est ouvert, etc.)

J'ai donc abandonné la fonction LimitToList et écrit mon propre événement de validation en utilisant la méthode de validation standard. Pourquoi quelqu'un écrit une fonctionnalité qui prévient la fermeture de formulaire est au-delà de moi!

8

Si vous voulez dire le bouton Fermer en haut à droite d'une fenêtre, vous devez utiliser l'événement FormClosing.

+0

J'ai passé cette méthode pour pouvoir donner à un de mes programmes un "réduire au plateau" à proximité. Assez simple –

1

En supposant que le bouton de sortie fait référence au petit bouton 'X' dans le coin supérieur droit; non. C'est-à-dire que cliquer sur le bouton déclenche directement l'événement onClose, sans aucune pression sur les boutons intermédiaires ou événements auxquels vous pouvez vous lier. Une fois que vous êtes dans le OnClose, vous pouvez essayer de comprendre comment vous y êtes arrivé, mais il n'y a pas d'étape intermédiaire. Ce que je recommande, c'est que toute votre validation soit appelée depuis l'événement de clôture; En cas d'échec d'une validation, vous pouvez annuler la fermeture via les arguments d'événement onClose, et travailler à partir de là.

+0

Cela explique ce que je voyais quand j'ai essayé de piéger l'objet ActiveControl. Merci, vous avez raison. – Jeff

6

Pour ajouter à ce que Ray a dit, vous pouvez vérifier l'événement FormClosing du formulaire.

Plus précisément, consultez la propriété CloseReason de FormClosingEventArgs. Si l'utilisateur a cliqué sur le «x» dans le coin supérieur droit du formulaire, la valeur de cette propriété sera UserClosing. Cependant, si vous avez votre propre bouton Fermer qui ferme le formulaire, cette propriété aura la même valeur, donc vous ne pouvez pas dire comment l'utilisateur a fermé le formulaire. Ce que je fais est d'ajouter un champ booléen à mon formulaire appelé quelque chose comme _closeButtonClicked, et mettre à true si mon bouton Fermer a été cliqué. Dans mon événement FormClosing je vérifie e.CloseReason == UserClosing et _closeButtonClicked.

Cela fonctionne pour moi mais j'aimerais savoir s'il y a une meilleure façon.

Questions connexes