[C# 5/.NET4] Validation de TextBox

scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 - 14 janv. 2015 à 23:07
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 - 15 janv. 2015 à 22:48
Bonjour,

je suis lis actuellement cet ouvrage :

[url]http://www.editions-eni.fr/livres/c-5-developpez-des-applications-windows-avec-visual-studio-2013/.ca09590490c4bebf6503fdd965e12be1.html/url

(et je me régale).

Dans un des chapitres, il parle des contrôles utilisateurs et de la gestion des erreurs via errorProvider.

Créer un contrôle dérivant de textBox appelé EmailTextBox permet donc de centraliser sa validation des e-mails une seule fois via errorProvider. Jusque là, je suis OK.

- Est ce qu'implémenter IEMailValidator ne serait pas une meilleure implémentation ?

Si ce champ doit être inséré dans une base de données, j'ai peur de l'injection SQL et donc tous les contrôles doivent être filtrés. So :

- Est ce qu'il y a du code ou une option disponible existante afin de ne pas ré-inventer la roue ?

- Est ce que l'on doit créer une interface INoSqlValidator permettant ainsi d'avoir un contrôle de type E-mail sans code SQL ?

Merci,

Vincent

3 réponses

Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
Modifié par Whismeril le 15/01/2015 à 09:52
Bonjour

n'ayant pas lu le livre, comme sans doute la plupart des gens qui répondent ici (on ne débute plus vraiment), je ne vois pas de quoi tu parles.

Il nous faut des détails,
par exemple mes recherches sur IEMailValidator ne donnent rien, il s'agit peut être d'une interface que l'auteur a créée pour son cours...
De plus une interface ne donne pas de résultat, elle t'impose d'écrire la méthode qui donnera ce résultat.
Par exemple, on veut mettre une liste de Personne dans un combobox.

    public class Personne
    {
        public string Nom { get; set; }

        public string Prenom { get; set; }
    }


On veut que le combobox soit trié automatiquement (propritété Sorted) et que ce tri soit par prénom puis nom.
Il faut donc implémenter IComparable, qu'a cela ne tienne, je tape :IComparable et click droit / Implémenter l'interface / Implémenter l'interface
et hop visual studio écrit du code pour moi
    public class Personne:IComparable 
    {
        public string Nom { get; set; }

        public string Prenom { get; set; }

        public int CompareTo(object obj)
        {
            throw new NotImplementedException();
        }

    }


SI je mets ça dans mon combobox ben il va y avor une erreur Interface non implémentée.
C'est donc bien moi qui doit expliquer comment faire.
    public class Personne:IComparable 
    {
        public string Nom { get; set; }

        public string Prenom { get; set; }

        public int CompareTo(object obj)
        {
            Personne autre = (Personne)obj;
            if (Prenom.CompareTo(autre.Prenom) != 0)
                return Prenom.CompareTo(autre.Prenom);
            else
                return Nom.CompareTo(autre);
        }

    }

Voila pour les interface en général.

Et pour te répondre précisément, des détails, du code etc....



La modération m'amène à intervenir dans de nombreux posts, mais le seul langage que je maitrise est le C#, un peu de VB aussi. Pour vos codes pensez à la coloration. Réponse trouvée ->Question Résolue
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
15 janv. 2015 à 10:25
ok. je me suis mal exprimé.

Dans l'ouvrage, il parle de ErrorProvider pour vérifier la conformité d'un champ de type e-mail.
Il dérive l'objet M$ TextBox pour implémenter sa version d'un contrôle EmailTextBox. (il utilise RegEx pour valider).
De ce fait, dans tous ces formulaires, il implémente ce contrôle et comme ça, il ne refait pas de code pour vérifier la saisie.
Jusque là, tout va bien, j'ai bien compris son exemple.

Là où je m'interroge, c'est si tu veux pouvoir créer un contrôle qui vérifie les injections de code SQL dans la saisie.
Là d'un coup, je vois 2 implémentations possibles :

- NoSqlTextBox qui dérive de TextBox. Ensuite EmailTextBox qui dérive de NoSqlTextBox. Dans ce cas, on peut donc gérer ErrorProvider pour ces 2 cas de figure (et espérer qu'il n'y ai pas de nouveau cas à gérer sinon bonjour l'héritage).

- On crée 2 interfaces IEMailValidator et INoSqlValidator. On ajoute ces interfaces à un contrôle EmailTextBox et on implémente donc les interfaces dedans. Il faut donc créer toute la partie validation.

Je ne suis pas familier avec les interfaces encore mais je pense que c'est plus utilisable. Imaginons par exemple que l'on aille lire dans un fichier binaire, dans un fichier HTML ou je ne sais quoi, on pourra utiliser l'interface INoSqlValidator pour s'assurer que la source n'est pas corrompue.

Tout est histoire de design on va me dire ?
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
15 janv. 2015 à 22:48
J'ai trouvé cet article qui en parle pour ASP.NET :

[url]http://msdn.microsoft.com/en-us/library/ff648339.aspx/url

Parallèlement sous .NET 4, Entity Framework avec les chaînes SQL paramétrées, cela rendrait impossible l'injection SQL.

A suivre...
0
Rejoignez-nous