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

MFC Discussion :

Controle des caractères saisis dans CEdit


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Par défaut Controle des caractères saisis dans CEdit
    Salut,

    je suis débutante en MFC et je veux savoir comment faire un controle sur la zone de saisie (en utilisant CEdit) pour ne pas accepter qu'au maximum 8 lettres ou chiffres? de plus le bouton OK du boite de dialogue soit grisé si on dépasse les 8 caractéres.

    Merci d'avance de m'aider.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Par défaut
    Bonjour,

    j'ai lu le FAQ mais je n'ai pas pu l'adapter à mon cas.
    Mon boite de dialogue est de type CDialog et elle a un élément de type CEdit pour saisir un numéro terminal (ne doit contenir que des lettres et des chiffres) qui ne dépasse pas le 8 caractéres et le bouton OK de boite du dialogue devient grisé à partir du 8éme caractéres.Merci de m'expliquer comment procéder et comment utiliser OnChar() et OnKeyDown() pour effectuer ce controle.(le boite de dialogue fonctionne bien mais je veux ajouter ce controle pour le saisie).

    Merci d'avance.

  4. #4
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Salut
    Le lien donné répondrait pourtant bien à tes besoins..
    A chaque caractère entré, tu rentres dans la fonction OnChar(), ce qui te permet de :
    • Vérifier que les caractères entrés sont bien des chiffres ou des lettres
    • Vérifier que tu n'en a pas plus de 8
    • Agir sur ton bouton si le texte dépasse les 8 caractères.
    What else?

    NB: tu peux également te servir des macros DDV_xxxx, ou limiter dans l'éditeur de ressources le champ de ton CEdit à 8.

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Par défaut
    Bonjour,

    j'ai ajouté la méthode ONChar comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void EditTerminalDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
     {
     
       lg++;
       if(lg==7)
          GetDlgItem(IDOK)->EnableWindow(TRUE);    
     
       CDialog::OnChar(nChar, nRepCnt, nFlags);
     }
    avec lg un membre public de ma classe initialisé à 0 dans le constructeur.

    Et j'ai fait GetDlgItem(IDOK)->EnableWindow(FALSE); dans la méthode EditTerminalDlg::OnInitDialog (). Le contrôle sur les chiffres et les lettres je l'ai fait dans EditTerminalDlg::OnBnClickedOk().

    Mais à l'exécution le bouton OK reste toujours grisé.
    alors comment procéder?
    Merci pour votre aide.

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    si EditTerminalDlg est une classe héritée de CEdit tu ne peux pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     GetDlgItem(IDOK)->EnableWindow(TRUE);
    mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        GetParent()->GetDlgItem(IDOK)->EnableWindow(TRUE);
    sinon vérifie la valeur de lg en mode trace/debug et surtout place un point d'arrêt sur cette ligne..

  7. #7
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Ce que tu fais te permet seulement de compter 7 passages dans OnChar() avant de dégriser le bouton, puis de le re-griser au 8e. En aucun cas il ne se base sur la taille du texte.
    D'autre part, es-tu bien sûr de passer dans cette méthode à chaque fois que tu saisis du texte dans ton CEdit (à vérifier avec un point d'arrêt)?

Discussions similaires

  1. Filtrer les caractères saisis dans un CEdit
    Par ABAM3194 dans le forum MFC
    Réponses: 15
    Dernier message: 09/04/2015, 12h17
  2. [MySQL] refus des caractères arabes dans la saisie
    Par Amel_B dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 03/12/2008, 10h30
  3. saisie des caractéres arabe dans un jTextField
    Par RouRa22 dans le forum Composants
    Réponses: 12
    Dernier message: 08/09/2008, 09h57
  4. récupérer des données saisies dans un fichier
    Par natie_49 dans le forum C++
    Réponses: 6
    Dernier message: 24/11/2005, 11h29
  5. Chaînes avec des caractères accentués dans Interbase
    Par Invité dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/03/2004, 22h39

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