IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] Vérification de saisie


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de Phenomenium
    Inscrit en
    Janvier 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2004
    Messages : 185
    Points : 90
    Points
    90
    Par défaut [C#] Vérification de saisie
    Salut, je voudrais ajouter une ligne qui me permette de vérifier la bonne saisi d'un entier par l'utilisateur. Pour cela je voudrais faire un truc du genre : tant que nb n'est pas un entier, afficher erreur .... Seulement je ne sais pas comment faire , je peu pas ecrire (ligne 19): voila le debut de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    using System;
     
    namespace ConsoleApplication1
    {
    	/// <summary>
    	/// Description résumée de Class1.
    	/// </summary>
    	class Class1
    	{
    		const int Max = 9;
     
    		static void remplTab(ref int[]Tab, ref int taille)
    		{
    			int i;
    			int nb;
    			i = 0;
    			Console.Write("Entrez un nombre : ");
    			nb = Convert.ToInt32(Console.ReadLine());
    			while (nb = ?????????)
    			{
    				Console.Write("Saisie incorrecte, veuillez retapez votre nombre.");
    				Console.Write("Entrez un nombre : ");
    				nb = Convert.ToInt32(Console.ReadLine());
    			}
     
    			while (i < Max && nb != 0)
    			{
    				Tab[i] = nb;
    				i = i + 1;
    				Console.Write("Entrez un nombre : ");
    				nb = Convert.ToInt32(Console.ReadLine());
    			}
    			taille = i - 1;
    		}
     
    		static void Afficher(ref int[]Tab, ref int taille, ref int Numero)
    		{
    			int i;
    			i = 0;
    			Console.WriteLine("Tableau numéro {0}", Numero);
    			for (i = 0; i <= taille;i++)
    			{
    				Console.WriteLine("{0} : {1}", i, Tab[i]);
    			}
    		}
    merci de votre aide

  2. #2
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    l'utilisation d'un try/catch qui englobe un Convert.ToInt32 peut t'aider. Ca doit exister une fonction qui verifie qu'un texte est un nombre (hum). Dans l'affirmative, il vaut mieux l'utiliser car les blocs try/catch pesent lourd à l'execution

    Didier Danse

    Most Valuable Profesionnal SharePoint
    Microsoft Certified Application Developer
    Mes articles sur developpez.com
    Mon site perso


  3. #3
    Membre régulier Avatar de Phenomenium
    Inscrit en
    Janvier 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2004
    Messages : 185
    Points : 90
    Points
    90
    Par défaut
    ba ouhai moi aussi j'aimerais mieux ...

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Essai ceci.


    soit b la valeur (string) entrée par l'utilisateur
    int i = 0;
    try
    {
    i = int.Parse(b);
    }
    catch(FormatException ao)
    {
    Console.WriteLine(ao.Message);
    }

  5. #5
    Membre régulier Avatar de Phenomenium
    Inscrit en
    Janvier 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2004
    Messages : 185
    Points : 90
    Points
    90
    Par défaut
    ok merci, mais j'aimerais comprendre comment ca fonctionne. Est ce que ca remplace un While, ou est ce que je doit mettre les deux ? Si oui comment ?

  6. #6
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    La solution standard c'est Double.TryParse (ca peut verif un Int)

    http://www.developpez.net/forums/viewtopic.php?t=235779

    Mais le probleme c'est qu'une exception est levee tout de meme, et ca c'est pas bien! Une exception c'est tres lourd et ca doit etre declanche uniquement en cas de problemes, Ms le crie sur tous les toits, voici un bench pour le prouver:

    http://aspalliance.com/articleViewer.aspx?aId=80&pId=3

    Donc le mieux pour verifier frequement (ton cas precis) si une str est un entier, c'est de verifier que chaque char de la string est un nombre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
        Public Function Numerik(ByVal tastring As String) As Boolean
     
            Dim i As Int32
            Dim isNum As Boolean = True
     
            For i = 0 To tastring.Length - 1
     
                If Not Char.IsDigit(tastring, i) Then
     
                    isNum = False
                    i = tastring.Length - 1
     
                    MessageBox.Show("le char a la position " + i.ToString + " n'est pas un chiffre")
     
                End If
     
            Next
     
            Return isNum
     
        End Function

  7. #7
    Membre régulier Avatar de Phenomenium
    Inscrit en
    Janvier 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2004
    Messages : 185
    Points : 90
    Points
    90
    Par défaut
    euh merci beaucoup, le problème c'est que j'ai deja pas mal de mal avec C# mais alors de passer de ta solution en C a C#... jsuis un peu perdu ...

  8. #8
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    c'est du vb.net nondidjiuuuuu!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    		public bool Numerik(string tastring)
    		{
    			Int32 i;
    			bool isNum = true;
    			for (int i = 0; i <= tastring.Length - 1; i++) {
    				if (!char.IsDigit(tastring, i)) {
    					isNum = false;
    					i = tastring.Length - 1;
    					MessageBox.Show("le char a la position " + i.ToString + " n'est pas un chiffre");
    				}
    			}
    			return isNum;
    		}
    (traduit en 10 nanosecondes grace au lien de ma signature)

  9. #9
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    C'est pas un peu gourmand de faire la vérif sur tous les caractères, un par un....

  10. #10
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    etrangement non, c'est meme ce qu'il y a de plus rapide

    http://aspalliance.com/articleViewer.aspx?aId=80&pId=3

    Si on regarde dans System.Double.TryParse(String, NumberStyles, IFormatProvider, Double&) : Boolean avec Reflector: on n'as pas d'appel direct a la machinerie interne du framework: c'est du code .net comme un autre. Donc il est possible de faire mieux

  11. #11
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    En effet

    pourtant, il est vrai que ma première réaction est celle que tout le monde pourrait avoir....

  12. #12
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    Je me suis posé la meme question tout à l'heure...

    Didier Danse

    Most Valuable Profesionnal SharePoint
    Microsoft Certified Application Developer
    Mes articles sur developpez.com
    Mon site perso


  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Voici ce que je propose à mes élèves pour vérifier la saisie de données numériques :

    1) créer une fonction qui vérifie la véracité de l'information saisie :

    static int SaisieInt(string question)
    {
    int num =0;
    string maLigne;
    bool err;
    do
    { try
    {
    err=false;
    Console.WriteLine(question);
    maLigne =Console.ReadLine();
    num = int.Parse(maLigne);
    }
    catch (System.FormatException )
    {
    Console.WriteLine("votre saisie est incorrecte !");
    err=true;
    }
    } while (err);

    return num;

    }


    2) appeler cette fonction

    L’appel pour vérifier la validité de la saisie d’un entier se fera ainsi :

    // saisie du nombre d'étudiants
    int nbEtu;
    libQuestion="saisir le nombre d’étudiants : ";
    nbEtu =SaisieInt(libQuestion);

    // saisie du nombre de profs
    int nbProf;
    libQuestion="saisir le nombre de professeurs : ";
    nbProf =SaisieInt(libQuestion);


    Il est bien sûr possible de créer une fonction SaisieFloat pour vérifier la saisie de float, de double...

    Puis, pour être encore plus "pro", vous pouvez créer une bibliothèque Utilitaire contenant une classe regroupant toutes ces méthodes de classe. Vous n'aurez plus qu'à ajouter une référence à cette bibliothèque dans tous les projets où vous souhaitez vérifier votre saisie ; vous pourrez alors appeler toutes vos méthodes de classe vérifiant la saisie depuis votre projet !!

    Bon courage !

  14. #14
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    Tout a fait d'accord pour ta methode KINKIN

    Mais le probleme est justement d'eviter de lancer une exception (elles sont tres couteuses en terme de performances) pour une raison autre que celles preconisees par microsoft
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconexceptionsoverview.asp

    C'est a dire: un simple test et non pas une erreur

    Il suffit d'imaginer qu'on ait un formulaire avec une quinzaine de champs a valider ou tout autre traitement en boucle

    [EDITION]
    je me suis trompe de lien
    http://msdn.microsoft.com/library/en-us/dnpag/html/scalenetchapt05.asp?frame=true#scalenetchapt05_topic24
    je laisse l'autre, il reste tout de meme interessant

  15. #15
    Membre confirmé Avatar de BrItneY
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    488
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 488
    Points : 501
    Points
    501
    Par défaut
    Juste une petite correction du code de Piotrek, pour ceux que cela intéresse i était définit 2 fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public bool Numerik(string tastring)
    		{
    			bool isNum = true;
    			for (Int32 i = 0; i <= tastring.Length - 1; i++) {
    				if (!char.IsDigit(tastring, i)) {
    					isNum = false;
    					i = tastring.Length - 1;
    					MessageBox.Show("le char a la position " + i.ToString + " n'est pas un chiffre");
    				}
    			}
    			return isNum;
    		}
    En tout cas merci beaucoup pour ce topic, très intéressant
    Blog de BrItneY. Avis et tests de jeux vidéos PC.

    "Un geek, ça n’est avant tout qu’un Homme Assisté par Ordinateur (H.A.O)" (www.copinedegeek.com)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérification des saisies dans une feuille
    Par Pep56 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/03/2009, 14h36
  2. script de vérification de saisie JS
    Par drogba72 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/12/2008, 22h19
  3. Réponses: 4
    Dernier message: 20/10/2008, 22h34
  4. vérification de saisie caractères
    Par caporga dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/06/2008, 22h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo