J'ai un formulaire avec plusieurs boîtes de texte et autres contrôles. J'utilise le contrôle de l'ErrorProvider et j'ai câblé l'événement de validation de chaque zone de texte que j'ai besoin de valider. L'événement de validation se produit lorsqu'un témoin de contrôle se concentre sur un autre contrôle. Donc, l'événement se produit lorsque vous utilisez la touche TAB pour vous éloigner de la commande actuelle ou lorsque vous cliquez sur un autre contrôle avec la souris 1 . Et je trouve que très ennuyeux, juste pour donner un exemple, si j'ouvre ce winform, puis essayez immédiatement de le fermer, cela ne me laissera pas, car la validation va déclencher de se plaindre que la première zone de texte n'a pas de texte. p>
Le comportement que je veux utilisera l'utilisation du fichier d'erreur, comment puis-je valider le formulaire entier uniquement lorsque je clique sur le bouton Enregistrer dans le formulaire? p>
merci p>
4 Réponses :
Il n'y a pas de moyen d'obtenir des winforms pour valider les contrôles de sauvegarde. Contrairement à un formulaire Web, il n'y a pas d'événement «Soumettre» ou «Enregistrer» (au moins pas sur le formulaire). Vous pouvez programmer le formulaire pour se comporter de cette façon, mais vous ne pourrez pas utiliser la liaison de données (enregistreriez définir le modèle et vérifier les erreurs). p>
Peut-être une meilleure façon est de ne pas utiliser de boîte de dialogue pour afficher des erreurs (je suppose que vous vous trouvez depuis que vous dites que ceci est un problème de fermeture du formulaire). Les info-bulles peuvent fournir une meilleure expérience utilisateur. Si l'utilisateur ignore les info-bulles, vous pouvez fournir une boîte de dialogue lors de la sauvegarde. Ils seront en mesure de fermer la forme même s'il y a de mauvaises données. P>
Définissez la propriété CauséValidation sur toutes les commandes (à l'exception du bouton Enregistrer) sur FALSE. Cela supprimera l'événement de validation de toutes les commandes, à l'exception du bouton. Ce n'est peut-être pas l'exacorme que vous voulez que le comportement gênant se produise lorsque vous changez de concentration sur le bouton, mais il est proche de ce que vous voulez, je pense. P>
Une autre option, si cela ne fonctionne pas, est de boucler à travers les commandes lorsque le bouton est cliqué et de les valider manuellement un à la fois ... P>
Voici le lien MSDN: http: //msdn.microsoft.com/en-us/library/system.windows.forms.control.causvalidation.aspx p>
Vérifiez la propriété form.Autovalidate . P>
Valeurs possibles: P>
La validation implicite ne se produira pas. Définir cette valeur ne sera pas interférer avec des appels explicites vers Validez ou validatechildren. P> blockQuote>
- AcablePreventFocusChange LI> ul>
La validation implicite se produit lorsque le Le contrôle perd la mise au point. P> blockQuote>
- Enableallowfocuschange Li> ul>
La validation implicite se produit, mais si La validation échoue, la mise au point sera toujours changer le nouveau contrôle. Si La validation échoue, l'événement validé ne tirera pas de feu. p> blockQuote>
le réglage sur
ENBLEALLOWFOCUSCHANGE code> résoudra le problème de l'ouverture du formulaire et d'essayer immédiatement de le fermer car l'accent sera transféré sur le bouton Annuler. P>
Si vous voulez un contrôle complet sur la validation, vous pouvez la définir sur
Désactiver code> et effectuer la validation manuelle à l'aide de
formulful.validate code> et
formulidatetechildren code> . Je ne suis pas sûr à 100%, mais je crois que
form.validatechildren code> ne déclenche pas les événements de validation des contrôles placés à l'intérieur d'un
Tabcontrol code>. P>.
Juste pour le garder mis à jour car João Angelo a déclaré que le formulaire.validatechildren () ne déclenche pas la validation des contrôles à l'intérieur, disons une boîte de groupe ou Tabcontrol. P>
Cependant, vous pouvez passer validationContraints au surchargé validatechildren (validationConstruistions) méthode et réglez-le sur aucun qui: p>
"Valide tous les contrôles des enfants et tous les enfants de ces enfants contrôlent, quels que soient leurs paramètres de propriété." p>