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] CList et CComboBox


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Par défaut [MFC] CList et CComboBox
    Bonjour,

    j'ai une liste d'objets créée avec la classe CList et je l'affiche dans une combo box.
    Je souhaite aussi pouvoir supprimer des éléments de cette liste en les sélectionnant dans la combo box mais ca ne marche pas.
    Voilà mon bout de code pour supprimer un élément:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void CListeMessagesDlg::OnDeleteMsg() 
    {
    	int iIndex = m_pListMsg->GetCurSel();
    	CMessage*	pMessageSel = (CMessage*) m_pListMsg->GetItemData(iIndex);
    	((CMainFrame*)	m_pMainFrame)->SupprimerMessage(pMessageSel);
    	AfficherListeMessages();
    }
    code de la méthode SupprimerMessage(pMessageSel):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void CMainFrame::SupprimerMessage (CMessage* pMessageASupprimer)
    {
    	if( pMessageASupprimer == NULL)
    	{
    		return;
    	}
    	else
    	{
    		POSITION pos=m_pListeMessages->Find(pMessageASupprimer);
    		m_pListeMessages->RemoveAt(pos);
    	}
    }
    et enfin le code de la méthode AfficherListeMessages():
    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
     
    void CListeMessagesDlg::AfficherListeMessages()
    {
    	m_pListMsg = (CComboBox*) GetDlgItem(IDC_COMBO_LIST_MSG);
    	m_pListeMessages = ((CMainFrame*)	m_pMainFrame)->GetListeMessages();
    	if (m_pListeMessages == NULL)
    	{
    		return;
    	}
    	UINT uiNbMessages = ((CMainFrame*)	m_pMainFrame)->GetNbMessages();
    	POSITION pos = m_pListeMessages->GetHeadPosition();
    	for (UINT ui = 0; ui < uiNbMessages/*(int) uiNbMessages*/ ; ui++)
    	{
    		m_pMessage = (CMessage*) m_pListeMessages->GetNext(pos);
    		CString sNomMessage = m_pMessage->GetNomMessage();
    		m_pListMsg->AddString(sNomMessage);
    	}
    }
    Voilà le problème vient du fait que quelque soit l'élément sélectionné le pointeur pMessageSel de la méthode OnDeleteMsg() est toujours à NULL et donc ses champs sont vides...

    Si vous voyez d'ou cela peut venir merci de me l'indiquer.

    Bien sur la méthode AfficherListeMessages() est appelée dans le InitDialog() de la dialog box donc les variables m_pListMsg et m_pListeMessages sont définies.

  2. #2
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par défaut
    tu fais :

    CMessage* pMessageSel = (CMessage*) m_pListMsg->GetItemData(iIndex);


    à quel moment tu fais un SetItemData ?

  3. #3
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Par défaut
    je n'en fais pas...
    je vois pas pourquoi je dois en faire un surtout

  4. #4
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par défaut
    bah si tu fais un GetItemData, c'est pour recuperer ce que tu as mis dans SetItemData. Donc si tu fais jamais de SetItemData, il est normal que tu recupere NULL lorsque tu fais GetItemData.

    Comment le COMBO peut savoir ce que tu veux recuperer dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int iIndex = m_pListMsg->GetCurSel(); 
       CMessage*   pMessageSel = (CMessage*) m_pListMsg->GetItemData(iIndex); 
       ((CMainFrame*)   m_pMainFrame)->SupprimerMessage(pMessageSel); 
       AfficherListeMessages();
    en sachant que tu ne fais que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_pListMsg->AddString(sNomMessage);
    tu demandes au COMBO d'ajouter une chaine de caratere et il est censé deviner à quel CMessage associé ???


    un COMBOBOX est une armoire à tiroir. Le AddString ne fait que mettre une etiquette sur un tiroir, si tu mets rien a l'interieur et que tu lui demandes de sortir ce qu'il y a dans le tiroir 1, il va te dire qu'il y a rien

    CQFD

  5. #5
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Par défaut
    c'est bon ca marche merci
    j'ai rajouté un SetItemData apres le AddString().
    Encore merci

  6. #6
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Par défaut
    En fait non ca marche tjs pas.
    Il vaut une valeur maintenant, mais forcément c toujours la valeur de mon dernier élément entré...
    il ne se remet jamais a jour

  7. #7
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Par défaut
    voilà en fait ce que j'ai modifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (UINT ui = 0; ui < uiNbMessages ; ui++)
    	{
    		m_pMessage = (CMessage*) m_pListeMessages->GetNext(pos);
    		m_pListMsg->SetItemDataPtr(ui,(CMessage*) m_pMessage);
    		CString sNomMessage = m_pMessage->GetNomMessage();
    		m_pListMsg->AddString(sNomMessage);
    	}
    dans la méthode AfficherListeMessages()

    et dans la méthode OnDeleteMsg():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int iIndex = m_pListMsg->GetCurSel();
    	m_pMessage = (CMessage*) m_pListMsg->GetItemDataPtr(iIndex);
    	((CMainFrame*)	m_pMainFrame)->SupprimerMessage(m_pMessage);
    	AfficherListeMessages();
    Mais là encore le pointeur reste a NULL sauf si l'élément sélectionné correspond au dernier élément ajouté a la liste...

  8. #8
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Par défaut
    non en fait il reste a NULL quelque que soit l'élément sélectionné.
    désolé

  9. #9
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par défaut
    essai ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for (UINT ui = 0; ui < uiNbMessages ; ui++) 
       { 
          m_pMessage = (CMessage*) m_pListeMessages->GetNext(pos); 
          m_pListMsg->SetItemDataPtr(ui,(CMessage*) m_pMessage); 
          CString sNomMessage = m_pMessage->GetNomMessage(); 
          int pos = m_pListMsg->AddString(sNomMessage); 
     
    m_pListMsg->SetItemData(pos, (DWORD)m_pMessage);
     
       }

  10. #10
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 35
    Par défaut
    C'est vrai ça la drogue c'est mal

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

Discussions similaires

  1. [MFC][Visual 2005] Problème CList
    Par samtheh dans le forum MFC
    Réponses: 1
    Dernier message: 17/06/2006, 23h26
  2. MFC CcomboBox
    Par kanabzh29 dans le forum MFC
    Réponses: 20
    Dernier message: 11/04/2006, 12h21
  3. Réponses: 2
    Dernier message: 21/12/2005, 09h39
  4. [MFC] problème avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    Réponses: 12
    Dernier message: 11/06/2004, 15h31
  5. [MFC] Voir le contenu de ma CComboBox !!
    Par Soulsurfer dans le forum MFC
    Réponses: 2
    Dernier message: 09/06/2004, 12h57

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