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 :

comment valider une double saise d'un edit control


Sujet :

MFC

  1. #1
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut comment valider une double saise d'un edit control
    salut ,

    j'ai un edit controle dans une CDialog et je me propose de valider le contenu uniquement apres deux saisies successives et identiques...j'ai associé une variable "m_num_cedula" a mon edit control de type "char" et j'ai ecrit ce bouit de code dans l'action du bouton approprié:

    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
     
     
    void CVCADlg::OnBnClickedButton6()
    {
    string num_cedula1,num_cedula2;
    UpdateData(FALSE); 
    AfxMessageBox(m_num_cedula);
    num_cedula1 = m_num_cedula ;
    AfxMessageBox(num_cedula1.c_str());
    m_numcedula = "";    
     UpdateData(FALSE);
    num_cedula2 = m_num_cedula ;
    AfxMessageBox(num_cedula2.c_str());
     
    if ( num_cedula2 == num_cedula1 )	
     
    	{
     
     
     
    STEP2Dlg step2Dlg;
       EndDialog(0);
       step2Dlg.DoModal();
     
    	}
    	else
    	{
          UpdateData(FALSE);
    	}
    mais le contenu est toujours vide dans les deux variables que j'ai reservées pour recevoir les deux saisies! et comme ca le test est toujours positif et on passe a la fenetre suivante chose que je ne veux pas ;(
    le contenu que ej dosi saisir est uen chaine de caractere , avais je choisi le mauvais type pour ma variable de controle?

    comment palier a cette erreur ? ou se trouve l'anomalie?

    merci

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    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 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    1/ Par pitié, indente ton code avant de poster ('ctrl k'+'ctrl f' est ton ami )
    2/ Crée une variable pour ton CEdit
    3/ Utilise la méthode CEdit::GetWindowText(CString &)

    Hope it helps.

  3. #3
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    bonjour

    y a t il un moyen plus simple pour valiser le contenu de cette double saisie !!

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    je ne pense pas. c'est déjà très simple

  5. #5
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut


    donc finalement ca consiste en quoi ? ... aurais tu une suggestion de code comme solution !

    merci

  6. #6
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    1) Crée une variable pour ton CEdit (m_csEdit)
    2) bool bFirst = true, quand on valide l'edit la 1ere fois bFirst = false
    3) si bFirst==true alors m_csEdit updatée,
    4) si bFirst==false alors on regarde si m_csEdit == la CString qu'on récupère via GetWindowText sur l'edit

  7. #7
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    bFirst doit etre une variable associé au Cedit aussi ou bien dans le code de la methode du bouton?

  8. #8
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par jlassira
    bFirst doit etre une variable associé au Cedit aussi ou bien dans le code de la methode du bouton?
    m_bFirst si tu préfères. un booléen membre de la classe dialog qui contient le CEdit.

  9. #9
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    voilà le bout de code que j'ai tenté mais ca ne donne pas exactement ce que je veux je ne comprends pas pourquoi ca marche pas
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
     
    CVCAConfig *m_VCAConfig = CVCAConfig::GetInstance();
    CString num_cedula1,num_cedula2;
     
         // premiere saisie : sachant que m_bfirst est initialisé a true 
     
         if ( m_bFirst)
    	 {
    	 UpdateData(TRUE); 
     
    	 while(this->m_num_cedula == ""  ||this->m_num_cedula.GetLength() < m_VCAConfig->getIsValidNumcedulCriteria() ) // test de validité de longueuer que je fais
    	 {        
    		 UpdateData(TRUE); 
     
     
    	 }
    	 // preparer la  deuxieme saisie
    	 num_cedula1 = this->m_num_cedula ;
    	 this->m_num_cedula = "" ;
    	 UpdateData(FALSE); 
    	 m_bFirst = false ;
     
    	 }
     
    	 else
     
    	 {
            UpdateData(TRUE); 
     
    	 while(this->m_num_cedula == ""  ||this->m_num_cedula.GetLength() < m_VCAConfig->getIsValidNumcedulCriteria() )
    	 {        
    		 UpdateData(TRUE); 
    		 AfxMessageBox("ressayez!");
     
    	 }
    	 // preparer la  deuxieme saisie
         num_cedula2 = this->m_num_cedula ;
    	 this->m_num_cedula = "" ;
    	 UpdateData(FALSE); 
    	 m_bFirst = true ;
     
     
    	 }
     
     
        if ( num_cedula2 == num_cedula1 )	
     
    	{
     
    	CVCAConfig *m_VcaConfig = CVCAConfig::GetInstance();    
    	// recuperation des principales classes resultats à utiliser
        CCardList *m_CCardList = CCardList::GetInstance();    
       // CCard m_CurrentCard = m_CCardList->CurrentCardList.GetAt(i);
       CVCADlg::m_CurrentCard.setnum_cedula(num_cedula2); 
     
    	// remettre la fiche dans le tas 
       m_CCardList->CurrentCardList.SetAt(m_occurence,CVCADlg::m_CurrentCard); // ajout:elyoum
     
        // 
     
    	// TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle
     
      STEP2Dlg step2Dlg(m_occurence) ;
       EndDialog(0);
       step2Dlg.DoModal();
     
    	}
    	else
    	{
          UpdateData(TRUE);
    	  this->m_bFirst = true; // relecture toujours!
    	}

  10. #10
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    je pensais à une truc dans le genre

    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
    void CDVPMFCDlg::OnOK() 
    {
    	UpdateData(true);
     
    	if (m_bFirst)
    	{
    		AfxMessageBox("Confirmation de la 1ere saisie");
    		m_csSave = m_csEdit;
    		m_csEdit = "";
    		m_bFirst = false;
    		UpdateData(false);
    	}
    	else if (m_csSave != m_csEdit)
    		AfxMessageBox("C'est pas cool");
    	else
    	{
    		AfxMessageBox("C'est cool");
    		CDialog::OnOK();
    	}
    }
    avec
    m_csEdit le texte de l'edit
    m_csSave la sauvegarde de la 1ere saisie
    m_bFirst indicateur de 1ere saisie

  11. #11
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    et comment tu fais pour tester qu'on a pas saisie quelquechose vide par exemple? parce qu'il faut pas que el contenu soit vide
    merci

  12. #12
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    m_csEdit.GetLength() > 0

  13. #13
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    non je le sais ca ...mais ej veux dire un simple if avec les test ou de preference un while !

  14. #14
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    tu peux compléter la condition

    comme ça la 1ere saisie devra forcément être != ""
    et comme la 2e n'est valider que pour (1) = (2), c'est gagné.

  15. #15
    Membre du Club Avatar de jlassira
    Inscrit en
    Mai 2005
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 228
    Points : 61
    Points
    61
    Par défaut
    j'ai essayé ton code mais ca marche pas tout a fait !!
    seule la premeiere saisie est possible...je ne peux pas saisir al deuxiemme valeur afin d'assurer la comparaison!!


  16. #16
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    oué je viens de regarder de plus près. je suis allé trop vite sans tester et je n'ai pas mis la condition où il faut.
    cela dit arriver là ce n'est plus une question d'utilisation des MFC, mais d'algorithme.
    réfléchis un peu sur l'algo et tu verras tout de suite où tu dois placer la condition.

Discussions similaires

  1. Comment valider une de deux Option dans un Sql (Insert into)
    Par r.mehdi dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/05/2008, 17h20
  2. Comment Valider une css v1
    Par BigBarbare dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 13/05/2008, 12h38
  3. Comment valider une formulaire par la fermeture de la fenêtre?
    Par insane_80 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/02/2007, 11h08
  4. Réponses: 12
    Dernier message: 30/01/2006, 22h13

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