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 :

[MFC] Problème d'EditBox


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut [MFC] Problème d'EditBox
    Bonjour tout le monde !

    Voila mon problème :

    Je dois pouvoir modifier des valeurs numériques dans un fichier texte (entières et réelles) par l'intermédiaire d'une interface avec des EditBox auxquels j'ai associé les variables correspondantes aux valeurs à modifier.
    La lecture et l'écriture de ces valeurs ce font très bien.
    Mon problème c'est que je peux aussi mettre du texte. Il me faudrait donc limiter la saisie à des caractères numériques et un point pour les décimaux.
    Dans les propriétés des EditBox on peut limiter aux caractères numériques seulement. Ce qui me pose un problème pour les nombres décimaux.

    Quelle solution me proposez-vous ?

    Merci d'avance.

    Jérémy

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Je ne vois pas d'autre solution que d'intercepter le message EN_CHANGE du CEdit et de virer les décimales.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    Ok je n'y avais pas pensé.
    Mais je sais pas trop comment m'y prendre j'ai essayé plusieurs choses mais ca marche pas.
    Auriez-vous une solution ?

    Merci !

    Jérémy

  4. #4
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    tu ne sais pas trop comment intercepter le message ? si c'est ca alors :
    1. visual studio 6 : classpath et je crois que c'est messages ou bien évènement je ne sais plus lol et tu verras le message EN_CHANGE dans une liste
    2. visual studio 2003 (2005 ?) : clique sur ton edit vas danta fenetre propriete clique sur le petit n'eclair (je crois que c'est ca) et tu verras sur la colonne de gauche un EN_CHANGE

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    Merci

    non ca c'est bon !

    C'est le code que je met aprèsil n'a aucun effet sur mon EditBox.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Par défaut
    Apres tes modifs, tu as fait un petit UpdateData(false) pour bien "sauver" les valeurs....

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    Avec UpdateData(false) c'est mieux !

    Mais je ne vois pas trop comment lui dire de ne prendre que les chiffres et le point.

    J'ai fait ca : (Seuil_PenteTQ est une CString)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void CDlgReglages::OnEnChangeEdit13()
    {
       if(_ttoi(Seuil_PenteTQ.Right(1))>9 || _ttoi(Seuil_PenteTQ.Right(1))<1)
          Seuil_PenteTQ = Seuil_PenteTQ.Left(Seuil_PenteTQ.GetLength()-1) ;
     
       UpdateData(false) ;
    }
    mais ca marche pas.

    Avez-vous une idée ?

  8. #8
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    moi j'utiliserais la fonction strtod pour convertir en double (voir FAQ : http://c.developpez.com/faq/vc/?page...ConvertCString) et je verifierai une verification sur stopstring

  9. #9
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Sinon, dans la fonction que tu nous a donné:
    1/ Tu ne teste que le premier carractère de tout ce qu'il y a dan ton édit ( Seuil_PenteTQ.Right(1) ). Si tu veux tester toute ta chaine, il te faudra faire une boucle.
    2/ Il ne faut pas oublier de récupérer de contenu du CEdit avant de le traiter (peut-être le fais-tu ailleurs), à l'aide de CEdit::GetWindowText(CString &text);

    Hope it helps.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    Non avec Seuil_PenteTQ.Right je teste le dernier caractère c'est-a-dire celui qui vient d'être saisi dans l'EditBox pour vérifier si il est valide.

    Sinon s'il ne l'est pas je garde toute la chaine mais avec le caractère invalide qui vient d'être saisi en moins:
    Seuil_PenteTQ.Left(Seuil_PenteTQ.GetLength()-1)

    Je vois pas trop....

  11. #11
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    ho, excuse-moi, j'ai répondu trop vite.
    Mais ce n'est pas très clair ton histoire, pourrais-tu donner quelques précisions?
    1/ Ca ne marche pas, d'accord, mais qu'est-ce qu'il se passe précisément?
    2/ Je ne comprends pas comment sont liés la variable Seuil_PenteTQ et ton CEdit.
    3/ Quand tu met un point d'arrêt dans ta fonction, est-ce que Seuil_PenteTQ contient bien ce qu'on a saisi dans le CEdit?

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    ho, excuse-moi, j'ai répondu trop vite.
    Pas de soucis

    1/ Ca ne marche pas, d'accord, mais qu'est-ce qu'il se passe précisément?
    Rien en fait !
    C'est-a-dire qu'avec le code que j'ai donné dans le post précédent, quand je rentre quelque chose, c'est supprimé immédiatement. Résultat : je peux rien rentrer.

    2/ Je ne comprends pas comment sont liés la variable Seuil_PenteTQ et ton CEdit.
    j'ai déclaré une variable liée à mon CEdit. (désolé pour les explications bidons mais je comprends rien au MFC

    3/ Quand tu met un point d'arrêt dans ta fonction, est-ce que Seuil_PenteTQ contient bien ce qu'on a saisi dans le CEdit?
    Je peux pas déboguer.

    Merci pour l'aide.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    hiko-seijuro :
    oui j'ai déjà vu mais je ne comprends pas très bien.
    Je vais quand même essayer

  14. #14
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    ca donnerait un truc comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char* stopString;
    strtod(Seuil_PenteTQ.GetBuffer(), &stopString);
    if (stopString != NULL)
      "traitement de ton erreur"

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    et ca fait quoi ca au juste ?

  16. #16
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    ca essaie de convertir en double et des qu'un caractère qui ne peut pas etre converti est détecté, il stock son adresse dans stopstring. Donc si tout est converti (tout est de la forme d'un double) , stopstring renvoie NULL.

    Si stopstring différent de null cela voudra dire que tu as un caractère interdit

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    Ce que j'appelle un caractere interdit c'est juste un caractère qui n'est pas un chiffre ou un point

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    hiko-seijuro :
    J'ai utilisé le code précédent que tu m'as donné mais ca ne marche pas.
    Même si je rentre un chiffre la condition if est respectée.
    Je ne comprends pas

  19. #19
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par le-makinero
    Avec UpdateData(false) c'est mieux !

    Mais je ne vois pas trop comment lui dire de ne prendre que les chiffres et le point.

    J'ai fait ca : (Seuil_PenteTQ est une CString)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void CDlgReglages::OnEnChangeEdit13()
    {
       if(_ttoi(Seuil_PenteTQ.Right(1))>9 || _ttoi(Seuil_PenteTQ.Right(1))<1)
          Seuil_PenteTQ = Seuil_PenteTQ.Left(Seuil_PenteTQ.GetLength()-1) ;
     
       UpdateData(false) ;
    }
    mais ca marche pas.

    Avez-vous une idée ?
    Essaie de mettre un UpdateData(true); avant le if.

    Comment se fait-il que tu ne puisse pas débugger??!!?

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Par défaut
    Je fais un stage ds un labo d'informatique
    c'est une question de droits, je les ai pas.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. [MFC] problème avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    Réponses: 12
    Dernier message: 11/06/2004, 15h31
  2. Réponses: 3
    Dernier message: 05/05/2004, 10h23
  3. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. [MFC] problème d'éxécution
    Par ben_iap dans le forum MFC
    Réponses: 2
    Dernier message: 15/03/2004, 10h31

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