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

C# Discussion :

vérification de la validité d'une date ( par keypress si possible )


Sujet :

C#

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut vérification de la validité d'une date ( par keypress si possible )
    bonjour,
    bon voila, j'ai commencé un script pour valider la saisie d'une date par le keypress, j'ai au moins réussi a limiter les caractères autorisés.

    mais ça ne va pas plus loin.

    ce que j'aimerais faire avec le keypress, c'est que quand j'atteins 10 caractères (jj/mm/aaaa en comptant les slashs), c# vérifie qu'il s'agit d'une date valide !

    bon pour connaitre la taille de la chaine ça va, maintenant je veux vérifier...
    des suggestions ??

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    merci pour le lien !
    bon voila ce que j'ai écris

    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
    if (unTexte.Length == 10)
    {
            CultureInfo frFR = new CultureInfo("fr-FR");
            string dateString;
            DateTime dateValue;
     
            if (DateTime.TryParseExact(unTexte, "dd/MM/yyyy", frFR, DateTimeStyles.AdjustToUniversal, out dateValue))
            {
                    return true;
            }
            else
            {
                    return false;
            }
    }
    il me génère les erreurs suivantes :

    Erreur 1 Le type ou le nom d'espace de noms 'CultureInfo' est introuvable (une directive using ou une référence d'assembly est-elle manquante*?) C:\Users\Adam Kadamon\Desktop\carnet de notes\BulletinScolaire\BulletinScolaire\Program.cs 123 17 BulletinScolaire

    Erreur 3 Le nom 'DateTimeStyles' n'existe pas dans le contexte actuel C:\Users\Adam Kadamon\Desktop\carnet de notes\BulletinScolaire\BulletinScolaire\Program.cs 127 73 BulletinScolaire

    en gros il me manque une bibliothèque ...

  4. #4
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Salut,
    il faut que tu rajoutes un "using" pour System.Globalization.
    Et aussi, tu peux directement écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return DateTime.TryParseExact(unTexte, "dd/MM/yyyy", frFR, DateTimeStyles.AdjustToUniversal, out dateValue))

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    ta ligne me génère une erreur O_o
    mais c'est pas grave

    bon, voila ce que j'ai écris :
    et c'est presque parfait ! ^^

    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
    private void TxtDate_KeyPress(object sender, KeyPressEventArgs e)
            {
                string unTexte = TxtDate.Text;
     
                if (Program.FormatDate(unTexte, e))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
     
                if (unTexte.Length == 10)
                {
                    CultureInfo frFR = new CultureInfo("fr-FR");
                    DateTime dateValue;
     
                    if (!DateTime.TryParseExact(unTexte, "dd/MM/yyyy", frFR, DateTimeStyles.AdjustToUniversal, out dateValue))
                    {
                        MessageBox.Show("Format de date incorrect. Veuillez ressaisir svp !");
                        TxtDate.Text = "";
                    }
                    else
                    {
                        MessageBox.Show("OK");
                    }
                }
            }

    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
    public static bool FormatDate(string unTexte, KeyPressEventArgs e)
            {
                // si c'est une touche de controle ...
                if (char.IsControl(e.KeyChar))
                {
                    return true;
                }
     
                // si c'est un slash
                else if (e.KeyChar == 47)
                {
                    return true;
                }
     
                // si c'est un chiffre ...
                else if (char.IsNumber(e.KeyChar))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
    le hic, c'est que lorsque j'ai finis de saisir ma date, rien ne se passe. il faut que je saisisse un 11eme caractere ou que j'utilise la touche effacer du clavier pour que la date soit vérifiée.

    quelqu'un aurait une idée ?

  6. #6
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Effectues la vérification des touches sur le KeyPress comme tu fais déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void TxtDate_KeyPress(object sender, KeyPressEventArgs e)
    {
        e.Handled = !Program.FormatDate(TxtDate.Text, e);
    }
    Et pour la validation des données utilise l'événement Validating du contrôle.
    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
    private void TxtDate_Validating(object sender, CancelEventArgs e)
    {
        DateTime dateValue;
     
        // On essaye de convertir le texte en date avec la culture en cours (fr si OS en fr).
        if (!DateTime.TryParseExact(TxtDate.Text, "dd/MM/yyyy", CultureInfo.CurrentCulture, DateTimeStyles.AdjustToUniversal, out dateValue))
        {
            MessageBox.Show("Format de date incorrect. Veuillez ressaisir svp !");
            e.Cancel = true;
        }
        else
        {
            MessageBox.Show("OK");
        }
    }
    Tu peux aussi utiliser l'événement Validated pour rendre le contrôle non bloquant, en permettant de sortir de la zone de saisie même si les données ne sont pas valides

Discussions similaires

  1. Validité d'une date.
    Par ishdiane dans le forum Langage
    Réponses: 4
    Dernier message: 28/06/2006, 14h03
  2. vérifier la validité d'une date
    Par griese dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/06/2006, 16h11
  3. [Dates] date() validité d'une date
    Par BigBarbare dans le forum Langage
    Réponses: 2
    Dernier message: 04/04/2006, 16h45
  4. Mettre une date par defaut dans une textBox.
    Par yaumme dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/12/2005, 22h39
  5. Réponses: 15
    Dernier message: 03/11/2005, 15h43

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