Validation des entrées d’utilisateur dans les Windows Forms

Lorsque les utilisateurs entrent des données dans votre application, vous pouvez vérifier que les données sont valides avant que votre application l’utilise. Vous pouvez exiger que certains champs de texte ne soient pas de longueur nulle, qu’un champ soit mis en forme en tant que numéro de téléphone ou autre type de données bien formées, ou qu’une chaîne ne contienne pas de caractères non sécurisés qui pourraient être utilisés pour compromettre la sécurité d’une base de données. Windows Forms fournit plusieurs façons de valider l’entrée dans votre application.

Validation avec le contrôle MaskedTextBox

Si vous devez obliger les utilisateurs à entrer des données dans un format bien défini, tel qu’un numéro de téléphone ou un numéro de partie, vous pouvez effectuer cette opération rapidement et avec un code minimal à l’aide du MaskedTextBox contrôle. Un masque est une chaîne composée de caractères d’une langue de masquage qui spécifie les caractères pouvant être entrés à n’importe quelle position donnée dans la zone de texte. Le contrôle affiche un ensemble d’invites à l’utilisateur. Si l’utilisateur tape une entrée incorrecte, par exemple, l’utilisateur tape une lettre lorsqu’un chiffre est requis, le contrôle rejette automatiquement l’entrée.

Le langage de masquage utilisé par MaskedTextBox est très flexible. Il vous permet de spécifier des caractères obligatoires, des caractères facultatifs, des caractères littéraux, tels que des traits d’union et des parenthèses, des caractères monétaires et des séparateurs de dates. Le contrôle fonctionne également correctement lorsqu’il est lié à une source de données. L’événement Format sur une liaison de données peut être utilisé pour reformater les données entrantes afin de se conformer au masque, et l’événement Parse peut être utilisé pour reformater les données sortantes afin de se conformer aux spécifications du champ de données.

Pour plus d’informations, consultez MaskedTextBox Control.

Validation pilotée par les événements

Si vous souhaitez un contrôle programmatique total sur la validation ou que vous devez effectuer des case activée de validation complexes, vous devez utiliser les événements de validation intégrés à la plupart des contrôles Windows Forms. Chaque contrôle qui accepte l’entrée utilisateur de formulaire libre a un Validating événement qui se produit chaque fois que le contrôle nécessite la validation des données. Dans la Validating méthode de gestion des événements, vous pouvez valider l’entrée utilisateur de plusieurs façons. Par exemple, si vous avez une zone de texte qui doit contenir un code postal, vous pouvez effectuer la validation de la manière suivante :

  • Si le code postal doit appartenir à un groupe spécifique de codes postaux, vous pouvez effectuer une comparaison de chaînes sur l’entrée pour valider les données entrées par l’utilisateur. Par exemple, si le code postal doit se trouver dans le jeu {10001, 10002, 10003}, vous pouvez utiliser une comparaison de chaînes pour valider les données.

  • Si le code postal doit se trouver dans un formulaire spécifique, vous pouvez utiliser des expressions régulières pour valider les données entrées par l’utilisateur. Par exemple, pour valider le formulaire ##### ou #####-####, vous pouvez utiliser l’expression ^(\d{5})(-\d{4})?$régulière . Pour valider le formulaire A#A #A#, vous pouvez utiliser l’expression [A-Z]\d[A-Z] \d[A-Z]\drégulière. Pour plus d’informations sur les expressions régulières, consultez les expressions régulières .NET Framework et les exemples d’expressions régulières.

  • Si le code postal doit être une États-Unis code postal valide, vous pouvez appeler un service web de code postal pour valider les données entrées par l’utilisateur.

L’événement Validating est fourni un objet de type CancelEventArgs. Si vous déterminez que les données du contrôle ne sont pas valides, vous pouvez annuler l’événement en définissant la Validating propriété truede Cancel cet objet sur . Si vous ne définissez pas la propriété, Windows Forms suppose que la Cancel validation a réussi pour ce contrôle et déclenche l’événement Validated .

Pour obtenir un exemple de code qui valide une adresse e-mail dans un TextBox, consultez Validating.

Validation basée sur les événements et la liaison de données

La validation est très utile lorsque vous avez lié vos contrôles à une source de données, telle qu’une table de base de données. En utilisant la validation, vous pouvez vous assurer que les données de votre contrôle répondent au format requis par la source de données et qu’elles ne contiennent pas de caractères spéciaux tels que des guillemets et des barres obliques inverses susceptibles d’être dangereuses.

Lorsque vous utilisez la liaison de données, les données de votre contrôle sont synchronisées avec la source de données pendant l’exécution de l’événement Validating . Si vous annulez l’événement Validating , les données ne sont pas synchronisées avec la source de données.

Important

Si vous avez une validation personnalisée qui a lieu après l’événement Validating , elle n’affecte pas la liaison de données. Par exemple, si vous avez du code dans un Validated événement qui tente d’annuler la liaison de données, la liaison de données se produit toujours. Dans ce cas, pour effectuer la validation dans l’événementValidated, modifiez la propriété mode de mise à jour de la source de données du contrôle (sous (Databindings)(Avancé)\) de OnValidation à Never, puis ajoutez Control<.DataBindings["YOURFIELD>"].WriteValue() à votre code de validation.

Validation implicite et explicite

Alors quand les données d’un contrôle sont-elles validées ? C’est à vous, le développeur. Vous pouvez utiliser la validation implicite ou explicite, en fonction des besoins de votre application.

Validation implicite

L’approche de validation implicite valide les données à mesure que l’utilisateur l’entre. Vous pouvez valider les données à mesure que les données sont entrées dans un contrôle en lisant les touches à mesure qu’elles sont enfoncées, ou plus souvent chaque fois que l’utilisateur enlève le focus d’entrée d’un contrôle et passe à la suivante. Cette approche est utile lorsque vous souhaitez donner à l’utilisateur des commentaires immédiats sur les données au fur et à mesure qu’ils fonctionnent.

Si vous souhaitez utiliser la validation implicite pour un contrôle, vous devez définir la propriété de AutoValidate ce contrôle sur EnablePreventFocusChange ou EnableAllowFocusChange. Si vous annulez l’événement Validating , le comportement du contrôle sera déterminé par la valeur à laquelle vous avez affecté AutoValidate. Si vous avez affecté EnablePreventFocusChange, l’annulation de l’événement entraîne l’annulation de l’événement Validated . Le focus d’entrée reste sur le contrôle actuel jusqu’à ce que l’utilisateur modifie les données en entrée valide. Si vous avez affecté EnableAllowFocusChangel’événement, l’événement Validated ne se produit pas lorsque vous annulez l’événement, mais le focus passe toujours au contrôle suivant.

L’affectation Disable à la AutoValidate propriété empêche la validation implicite. Pour valider vos contrôles, vous devez utiliser la validation explicite.

Validation explicite

L’approche de validation explicite valide les données à la fois. Vous pouvez valider les données en réponse à une action utilisateur, par exemple cliquer sur un bouton Enregistrer ou un lien Suivant. Lorsque l’action de l’utilisateur se produit, vous pouvez déclencher une validation explicite de l’une des manières suivantes :

  • Appelez Validate pour valider le dernier contrôle pour avoir perdu le focus.

  • Appelez ValidateChildren pour valider tous les contrôles enfants dans un formulaire ou un contrôle conteneur.

  • Appelez une méthode personnalisée pour valider les données dans les contrôles manuellement.

Comportement de validation implicite par défaut pour les contrôles Windows Forms

Les différents contrôles Windows Forms ont des valeurs par défaut différentes pour leur AutoValidate propriété. Le tableau suivant présente les contrôles les plus courants et leurs valeurs par défaut.

Contrôler Comportement de validation par défaut
ContainerControl Inherit
Form EnableAllowFocusChange
PropertyGrid Propriété non exposée dans Visual Studio
ToolStripContainer Propriété non exposée dans Visual Studio
SplitContainer Inherit
UserControl EnableAllowFocusChange

Fermeture du formulaire et substitution de la validation

Lorsqu’un contrôle conserve le focus, car les données qu’il contient ne sont pas valides, il est impossible de fermer le formulaire parent de l’une des manières habituelles :

  • En cliquant sur le bouton Fermer .

  • En sélectionnant Fermer dans le menu Système .

  • En appelant la Close méthode par programmation.

Toutefois, dans certains cas, vous souhaiterez peut-être permettre à l’utilisateur de fermer le formulaire, que les valeurs des contrôles soient valides. Vous pouvez remplacer la validation et fermer un formulaire qui contient toujours des données non valides en créant un gestionnaire pour l’événement du FormClosing formulaire. Dans l’événement, définissez la Cancel propriété sur false. Cela force la fermeture du formulaire. Pour plus d'informations et pour obtenir un exemple, consultez Form.FormClosing.

Remarque

Si vous forcez le formulaire à fermer de cette façon, toutes les données des contrôles du formulaire qui n’ont pas déjà été enregistrés sont perdues. En outre, les formulaires modals ne valident pas le contenu des contrôles lorsqu’ils sont fermés. Vous pouvez toujours utiliser la validation de contrôle pour verrouiller le focus sur un contrôle, mais vous n’avez pas à vous soucier du comportement associé à la fermeture du formulaire.

Voir aussi