Contrôle textbox validateur

Contenu du snippet

Ce contrôle sert à valider les données entrées dans un textbox selon se que l'on veut valider.
-Validation d'entier
-Validation de nombre à virgule
-Validation de texte alphanumérique
-Validation de texte
-Validation de date
-Validation de # de téléphone (Canada)
-Validation de courriel
-Validation de carte de crédit
-Validation de code postal (Québec)
-Validation de numéro assurance social (Canada)

Pour c'est champs, il est possible de «setter» une valeur minimal et maximal
-Entier
-Nombre virgule
-Date

Il y a une validation logique d'effectuer sur les max et min en fonction du type de validation

-On peut binder le textbox
-modifier les couleurs initial, lors d'erreur

et plus encore!

Source / Exemple :


/*
    Auteur : Raphaël A.
    Commentaire : Controle de validation de donnée
 
    Révisions et Modifications
    ---------------------------------------------------
    Date		            Par			        Commentaires      

  • 26 octobre Raphaël A. -Champ préremplis, couleur
  • du backcolor quand erreur
  • et couleur de l'écriture
  • quand erreur, modification
  • du nom ddes propriétés pour
  • les regrouper au même endroit
  • /
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using System.Text.RegularExpressions; namespace TextBoxValidator { public partial class TextboxValidator : UserControl { #region DECLARATION public enum enumTypeValidation {Entier, Nombre_virgule, Alphanumerique, Texte, Date, Adresse, TelephoneCanada, Courriel, CarteCredit, CodePostalQuebec, NASCanada}; private Regex regAlphanumerique = new Regex(@"^[\w]+$"); private Regex regTexte = new Regex(@"^[^0-9]+$"); private Regex regAdresse = new Regex(@"^[0-9]{1,5}([, -]?[a-bA-Z]{1,3})?[, -]{1}[\w -]+([, -]{1}[#]?[\w]{1,4})?$"); private Regex regTelephoneCanada = new Regex("^[1]?[ -]?[(]?[0-9]{3}[)]?[ -]?[0-9]{3}[ -]?[0-9]{4}$"); private Regex regCourriel = new Regex(@"^(([^<>()[\]\\.,;:\s@\""]+" + @"(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@" + @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" + @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+" + @"[a-zA-Z]{2,}))$"); private Regex regCarteCredit = new Regex("^[0-9]{4}[ -]?[0-9]{4}[ -]?[0-9]{4}[ -]?[0-9]{4}$"); private Regex regCodePostalQuebec = new Regex("^[a-zA-Z]{1}[0-9]{1}[a-zA-Z]{1}[, -]?[0-9]{1}[a-zA-Z]{1}[0-9]{1}$"); private Regex regNASCanada = new Regex("^[0-9]{3}[, -]?[0-9]{3}[, -]?[0-9]{3}$"); private int starter = 0; private bool ilYAUneErreur = true; #endregion public TextboxValidator() { InitializeComponent(); } #region PROPRIETES public enumTypeValidation typeValidation = enumTypeValidation.Entier; private Boolean valeurRequise = true; private string min = "0"; private string max = "0"; private Color backColorTextBox = Color.LightSteelBlue; private Color foreColorTextBox = Color.DarkBlue; private Color foreColorLabel = Color.Red; private bool bloquerUtilisateur = false; private Char caractereErreur = '*'; private Color backColorTexteBoxErreur = Color.LightPink; private Color foreColorTexteBoxErreur = Color.DarkBlue; #endregion #region ACCESSEUR public enumTypeValidation CtrlTypeValidation { get { return typeValidation; } set { typeValidation = value; switch (typeValidation) { case enumTypeValidation.Adresse: txtTexte.Text = "Aucune"; break; case enumTypeValidation.Alphanumerique: txtTexte.Text = "Aucun"; break; case enumTypeValidation.CarteCredit: txtTexte.Text = "9999-9999-9999-9999"; break; case enumTypeValidation.CodePostalQuebec: txtTexte.Text = "J1J 1J1"; break; case enumTypeValidation.Courriel: txtTexte.Text = "aucune@aucune.com"; break; case enumTypeValidation.Date: txtTexte.Text = DateTime.Now.ToString(); break; case enumTypeValidation.Entier: txtTexte.Text = "0"; break; case enumTypeValidation.NASCanada: txtTexte.Text = "999 999 999"; break; case enumTypeValidation.Nombre_virgule: txtTexte.Text = "0,00"; break; case enumTypeValidation.TelephoneCanada: txtTexte.Text = "1 555-555-5555"; break; case enumTypeValidation.Texte: txtTexte.Text = "Aucun"; break; default: txtTexte.Text = "Aucun"; break; } starter = 1; CtrlMax = CtrlMax; CtrlMin = CtrlMin; } } [Description("Indique si une valeur est obligatoire")] public Boolean CtrlValeurRequise { get { return valeurRequise; } set { valeurRequise = value; if (!valeurRequise) ilYAUneErreur = false; } } [Description("Indique la valeur minimale")] public string CtrlMin { get { return min; } set { int bidonInt = 0; double bidonDouble = 0; DateTime bidonDateTime = DateTime.Now; min = value; if (typeValidation == enumTypeValidation.Entier) if (!int.TryParse(min, out bidonInt) && starter == 1) min = "0"; if (typeValidation == enumTypeValidation.Nombre_virgule) if (!double.TryParse(min, out bidonDouble) && starter == 1) min = "0,00"; if (typeValidation == enumTypeValidation.Date) if (!DateTime.TryParse(min, out bidonDateTime) && starter == 1) min = "null"; if (CtrlTypeValidation == enumTypeValidation.Texte || CtrlTypeValidation == enumTypeValidation.Alphanumerique || CtrlTypeValidation == enumTypeValidation.Adresse || CtrlTypeValidation == enumTypeValidation.TelephoneCanada || CtrlTypeValidation == enumTypeValidation.Courriel || CtrlTypeValidation == enumTypeValidation.CarteCredit || CtrlTypeValidation == enumTypeValidation.CodePostalQuebec || CtrlTypeValidation == enumTypeValidation.NASCanada && starter == 1) min = "0"; } } [Description("Indique la valeur maximale")] public string CtrlMax { get { return max; } set { int bidonInt = 0; double bidonDouble = 0; DateTime bidonDateTime = DateTime.Now; max = value; if (CtrlTypeValidation == enumTypeValidation.Entier) if (!int.TryParse(max, out bidonInt) && starter == 1) max = "0"; if (CtrlTypeValidation == enumTypeValidation.Nombre_virgule) if (!double.TryParse(max, out bidonDouble) && starter == 1) max = "0,00"; if (CtrlTypeValidation == enumTypeValidation.Date) if (!DateTime.TryParse(max, out bidonDateTime) && starter == 1) max = "null"; if (CtrlTypeValidation == enumTypeValidation.Texte || CtrlTypeValidation == enumTypeValidation.Alphanumerique || CtrlTypeValidation == enumTypeValidation.Adresse || CtrlTypeValidation == enumTypeValidation.TelephoneCanada || CtrlTypeValidation == enumTypeValidation.Courriel || CtrlTypeValidation == enumTypeValidation.CarteCredit || CtrlTypeValidation == enumTypeValidation.CodePostalQuebec || CtrlTypeValidation == enumTypeValidation.NASCanada && starter == 1) max = "0"; } } [Description("Indique la couleur de fond du TextBox")] public Color CtrlBackColorTextBox { get { return backColorTextBox; } set { backColorTextBox = value; txtTexte.BackColor = backColorTextBox; } } [Description("Indique la couleur de l'écriture du TextBox")] public Color CtrlForeColorTextBox { get { return foreColorTextBox; } set { foreColorTextBox = value; txtTexte.ForeColor = foreColorTextBox; } } [Description("Indique la couleur de l'écriture du label")] public Color CtrlForeColorLabel { get { return foreColorLabel; } set { foreColorLabel = value; lblAvertissement.ForeColor = foreColorLabel; } } [Description("Indique si en cas d'erreur, l'utilisateur peut sortir du controle")] public bool CtrlBloquerUtilisateur { get { return bloquerUtilisateur; } set { bloquerUtilisateur = value; } } [Description("Caractère à afficher lorsqu'il y a une erreur")] public Char CtrlCaractereErreur { get { return caractereErreur; } set { caractereErreur = (value == ' ') ? '*' : value; } } [Description("Indique la couleur de fond du TextBox lorsqu'il y a une erreur")] public Color CtrlBackColorTexteBoxErreur { get { return backColorTexteBoxErreur; } set { backColorTexteBoxErreur = value; } } [Description("Indique la couleur de l'écriture du TextBox lorsqu'il y a une erreur")] public Color CtrlForeColorTexteBoxErreur { get { return foreColorTexteBoxErreur; } set { foreColorTexteBoxErreur = value; } } #endregion #region FONCTIONNALITE_EXTERNE private void txtTexte_Validating(object sender, CancelEventArgs e) { int bidonInt; double bidonDouble; DateTime bidonDateTime; bool passeLeTest = false; if (CtrlValeurRequise) { if (CtrlTypeValidation == enumTypeValidation.Entier && int.TryParse(txtTexte.Text, out bidonInt)) { passeLeTest = true; if (int.Parse(CtrlMax) != 0 | int.Parse(CtrlMin) != 0) { if (int.Parse(txtTexte.Text) > int.Parse(CtrlMax) || int.Parse(txtTexte.Text) < int.Parse(CtrlMin)) passeLeTest = false; } } if (CtrlTypeValidation == enumTypeValidation.Nombre_virgule && double.TryParse(txtTexte.Text, out bidonDouble)) { passeLeTest = true; if (double.Parse(CtrlMax) != 0 | double.Parse(CtrlMin) != 0) { if (double.Parse(txtTexte.Text) > double.Parse(CtrlMax) || double.Parse(txtTexte.Text) < double.Parse(CtrlMin)) passeLeTest = false; } } if (CtrlTypeValidation == enumTypeValidation.Alphanumerique && regAlphanumerique.IsMatch(txtTexte.Text)) passeLeTest = true; if (CtrlTypeValidation == enumTypeValidation.Texte && regTexte.IsMatch(txtTexte.Text)) passeLeTest = true; if (CtrlTypeValidation == enumTypeValidation.Date && DateTime.TryParse(txtTexte.Text, out bidonDateTime)) { passeLeTest = true; if (CtrlMax != "null" || CtrlMin != "null") { if (CtrlMin != "null" && DateTime.Parse(txtTexte.Text).CompareTo(DateTime.Parse(CtrlMin)) == -1) passeLeTest = false; if (CtrlMax != "null" && DateTime.Parse(txtTexte.Text).CompareTo(DateTime.Parse(CtrlMax)) == 1) passeLeTest = false; } } if (CtrlTypeValidation == enumTypeValidation.Adresse && regAdresse.IsMatch(txtTexte.Text)) passeLeTest = true; if (CtrlTypeValidation == enumTypeValidation.TelephoneCanada && regTelephoneCanada.IsMatch(txtTexte.Text)) passeLeTest = true; if (CtrlTypeValidation == enumTypeValidation.Courriel && regCourriel.IsMatch(txtTexte.Text)) passeLeTest = true; if (CtrlTypeValidation == enumTypeValidation.CarteCredit && regCarteCredit.IsMatch(txtTexte.Text)) passeLeTest = true; if (CtrlTypeValidation == enumTypeValidation.CodePostalQuebec && regCodePostalQuebec.IsMatch(txtTexte.Text)) passeLeTest = true; if (CtrlTypeValidation == enumTypeValidation.NASCanada && regNASCanada.IsMatch(txtTexte.Text)) passeLeTest = true; } //Si la valeur n'Est pas requise et que le champ de texte vaux rien, //on insère une valeur par défaut if (!CtrlValeurRequise) { passeLeTest = true; if (CtrlTypeValidation == enumTypeValidation.Entier && !int.TryParse(txtTexte.Text, out bidonInt)) txtTexte.Text = "0"; if (CtrlTypeValidation == enumTypeValidation.Nombre_virgule && !double.TryParse(txtTexte.Text, out bidonDouble)) txtTexte.Text = "0.00"; if (CtrlTypeValidation == enumTypeValidation.Alphanumerique && !regAlphanumerique.IsMatch(txtTexte.Text)) txtTexte.Text = "Aucun"; if (CtrlTypeValidation == enumTypeValidation.Texte && !regTexte.IsMatch(txtTexte.Text)) txtTexte.Text = "Aucun"; if (CtrlTypeValidation == enumTypeValidation.Date && !DateTime.TryParse(txtTexte.Text, out bidonDateTime)) txtTexte.Text = DateTime.Now.ToString(); if (CtrlTypeValidation == enumTypeValidation.Adresse && !regAdresse.IsMatch(txtTexte.Text)) txtTexte.Text = "Aucune"; if (CtrlTypeValidation == enumTypeValidation.TelephoneCanada && !regTelephoneCanada.IsMatch(txtTexte.Text)) txtTexte.Text = "1 555-555-5555"; if (CtrlTypeValidation == enumTypeValidation.Courriel && !regCourriel.IsMatch(txtTexte.Text)) txtTexte.Text = "aucune@aucune.com"; if (CtrlTypeValidation == enumTypeValidation.CarteCredit && !regCarteCredit.IsMatch(txtTexte.Text)) txtTexte.Text = "9999-9999-9999-9999"; if (CtrlTypeValidation == enumTypeValidation.CodePostalQuebec && !regCodePostalQuebec.IsMatch(txtTexte.Text)) txtTexte.Text = "J1J-1J1"; if (CtrlTypeValidation == enumTypeValidation.NASCanada && !regNASCanada.IsMatch(txtTexte.Text)) txtTexte.Text = "999 999 999"; } //Vérifie si la donnée entré correspond au critère d'acceptation if (passeLeTest) { txtTexte.BackColor = CtrlBackColorTextBox; txtTexte.ForeColor = CtrlForeColorTextBox; lblAvertissement.Text = ""; ilYAUneErreur = false; if (CtrlBloquerUtilisateur) e.Cancel = false; } else { txtTexte.BackColor = CtrlBackColorTexteBoxErreur; txtTexte.ForeColor = CtrlForeColorTexteBoxErreur; lblAvertissement.Text = CtrlCaractereErreur.ToString(); ilYAUneErreur = true; if (CtrlBloquerUtilisateur) e.Cancel = true; } } private void txtTexte_DoubleClick(object sender, EventArgs e) { txtTexte.Clear(); } public void binder(string PropertyString, object objet, string Property) { txtTexte.DataBindings.Add(new Binding(PropertyString, objet, Property)); } public void binder(object objet, string Property) { txtTexte.DataBindings.Add(new Binding("Text", objet, Property)); } public void passwordChar(Char caractere) { txtTexte.PasswordChar = caractere; } public string getText() { return txtTexte.Text; } public bool getIlYAUneErreur() { return ilYAUneErreur; } #endregion } }

Conclusion :


En espérant que ce contrôle vous serve!

Bonne prog ;)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.