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 :

ajouter un element à une ListBox


Sujet :

MFC

  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut ajouter un element à une ListBox
    bonjour,

    dans mon projet, j'ouvre une CDialog, qui est composé d'une ListBox.
    dans mon application, je rempli une liste de CString. et c'est cette liste que je vais mettre dans la listBox.
    mon code:

    dans ma class application:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    [...]
    CDiagFichierPlusRecent diag;
    diag.setList(listeFichierPlusRecent);
    diag.DoModal();
    [...]
    dan ma classe CDiag
    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 CDiagFichierPlusRecent::setList(list<CString> listeFichier)
    {
    	//CString str;
    	list<CString>::iterator it;
    	for(it=listeFichier.begin(); it!=listeFichier.end();it++)
    	{
    		//char * texte= (*it).GetBuffer((*it).GetLength()+1);
    		//str = (*it);
    	            //str.Format("%s.",(*it));
                             // str.Format(_T("blabla"));
                             // str= _T("blabla");
    		//m_listBox.AddString(str);
    		//m_listBox.AddString(texte);
    		m_listBox.AddString((*it));
    	}
     
    }
    mon probleme.. le addString ne marche pas. vous avez en commentaire les différents essais que j'ai effectué.
    mais à chaque ajout j'ai un message d'erreur qui apparait et ma listBox reste vide...
    je pense que c'est un probleme de conversion LPCSTR -->CString..
    j'ai déjà eu plusieurs fois le problème de conversion mais jusque la j'ai pu recréer mes propres méthodes... sauf que la je seche...

  2. #2
    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
    il serait judicieux de passer listfichier par référence et non par copie.
    tu rentres dans la boucle d'itération ?
    tu pourrais rajouter un TRACE des différentes valeurs avant le addstring pour vérifier le contenu.

  3. #3
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par farscape Voir le message
    il serait judicieux de passer listfichier par référence et non par copie.
    tu rentres dans la boucle d'itération ?
    tu pourrais rajouter un TRACE des différentes valeurs avant le addstring pour vérifier le contenu.
    ma liste de fichier est rempli et oui je rentre dans la boucle, lorsque j'affecte mon (*it) a str par exemple, str prend bien la valeur de (*it). c'est seulement au moment du AddString(..) qu'une boite de dialogue apparait. le titre de la boite de dialogue c'est " Microsoft Visual C++ Debug Library. " apres dans la boite de dialogue il y a marqué: "Debut Assertion failed" etc.

    mais c'est pas une erreur qui arrete mon application.. il y a trois bouton "Ignorer", "recommencer", "abandonner". si j'appuie sur Ignorer, mon programme continue.. il entre a nouveau dans la boucle, avec l'element suivant de ma liste.. il le reaffecte bien a la variable... et a nouveau, au AddString RE message d'erreur.. et comme ca jusqu'à ce que le parcours de ma liste soit fini. ensuite ma boite de dialogue apparait mais avec rien dans la listBox

  4. #4
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    t'es sûr que ta liste est vraiment créée ?

  5. #5
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par TheGzD Voir le message
    t'es sûr que ta liste est vraiment créée ?
    que ma liste est créée? tu veux dire la "listeFichier" que j'ai en parametre?
    si c'est celle là oui, je suis sure, j'ai mis des point d'arret j'ai regardé, et ma liste contient bien des CString.

    j'en suis sure aussi parce que je passe dans la boucle.. hors si ma liste etait vide elle n'y entrerai pas..

  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
    tu peux poster la ligne de code qui est affichée pour l'assertion d'erreur ?

  7. #7
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par farscape Voir le message
    tu peux poster la ligne de code qui est affichée pour l'assertion d'erreur ?
    je comprend pas ce que je dois poster....
    je mets en piece l'erreur qui s'affiche...
    Images attachées Images attachées  

  8. #8
    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
    tu presses le bouton recommencer et tu verras le code en question qui provoque l'erreur.
    dans mon tuto le dernier et celui de vc6 il y a un chapitre sur le debugage qui explique tout cela..

  9. #9
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AFXWIN_INLINE int CListBox::AddString(LPCTSTR lpszItem)
    	{ ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, LB_ADDSTRING, 0, (LPARAM)lpszItem); }
    _AFXWIN_INLINE int CListBox::DeleteString(UINT nIndex)
    le point d'arret se situe au niveau du "ASSERT". c'est dans la classe afxwin2.h

  10. #10
    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
    ben voila le problème est résolu non ?
    m_hwnd est null ce qui veut dire que ta lisbox n'est pas initialisée graphiquement .
    voir faq :http://cpp.developpez.com/faq/vc/ind...nge#UpdateData

  11. #11
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par farscape Voir le message
    ben voila le problème est résolu non ?
    m_hwnd est null ce qui veut dire que ta lisbox n'est pas initialisée graphiquement .
    voir faq :http://cpp.developpez.com/faq/vc/ind...nge#UpdateData
    c'est ce que ca veut dire...
    vais voir ton lien

  12. #12
    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
    Citation Envoyé par faq
    Toute variable contrôle déclarée dans une fenêtre dialogue (CDialog ou CFormView etc ..) qui ne fera pas partie de la fonction DoDataExchange ne sera pas « subclassée » son handle de fenêtre sera égal à NULL et son utilisation provoquera une assertion.

  13. #13
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Citation Envoyé par leame Voir le message
    que ma liste est créée? tu veux dire la "listeFichier" que j'ai en parametre?
    si c'est celle là oui, je suis sure, j'ai mis des point d'arret j'ai regardé, et ma liste contient bien des CString.

    j'en suis sure aussi parce que je passe dans la boucle.. hors si ma liste etait vide elle n'y entrerai pas..
    je parlais de ta list box

  14. #14
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Toute variable contrôle déclarée dans une fenêtre dialogue (CDialog ou CFormView etc ..) qui ne fera pas partie de la fonction DoDataExchange ne sera pas « subclassée » son handle de fenêtre sera égal à NULL et son utilisation provoquera une assertion.
    bah oui mais elle fait partie de DodataExchange
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void CDiagFichierPlusRecent::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Control(pDX, IDC_LIST1, m_listBox); // ici!!
    }



    .....................

    j'ai essayé de mettre le UpdateData(False);
    ca me lance un message:
    une opération non prise en charge a été tentée
    ..

  15. #15
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Seulement tu fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CDiagFichierPlusRecent diag;
    diag.setList(listeFichierPlusRecent); //ici tu utilises des ressources graphiques
    diag.DoModal(); // ici tu instancies les ressources graphiques : tu vois le soucis ?
    passe le setList dans le OnInitDialog de CDiagFichierPlusRecent et je pense que ton pb disparaitra.

  16. #16
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par TheGzD Voir le message
    Seulement tu fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CDiagFichierPlusRecent diag;
    diag.setList(listeFichierPlusRecent); //ici tu utilises des ressources graphiques
    diag.DoModal(); // ici tu instancies les ressources graphiques : tu vois le soucis ?
    passe le setList dans le OnInitDialog de CDiagFichierPlusRecent et je pense que ton pb disparaitra.
    en effet en faisant cela ça marche... mais pourquoi de ma façon ca ne marche pas??
    parce que là.. ça m'oblige à faire de ma liste une variable membre de la classe application pour pouvoir la récupérer alors que j'en ai besoin que pour une simple vérification...

    .................;

    Merci farscape!!
    Merci TheGzD!!

  17. #17
    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
    mince je n'avais pas fait attention a la première portion de code du premier post.

    pour répondre à ta question:
    http://cpp.developpez.com/faq/vc/ind...ToWorkWithCtrl

    ceci dit je maintiens ma remarque sur le passage par référence à la place du passage par valeur.
    pourquoi provoquer un copie de la list surtout si elle est importante ...
    ça devrait même etre par defaut une réference constante.

  18. #18
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par farscape Voir le message
    ceci dit je maintiens ma remarque sur le passage par référence à la place du passage par valeur.
    pourquoi provoquer un copie de la list surtout si elle est importante ...
    ça devrait même etre par defaut une réference constante.
    sans raison précise.. je passe par référence quand ma méthode modifie cette valeur. sinon..... je mets pas par référence... pourquoi c'est pas bien de mettre juste en paramètre sans passage par référence?

  19. #19
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    tu perds du temps de calcul et tu utilises plus de mémoire

  20. #20
    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
    il me semble avoir répondu:
    pourquoi provoquer une copie de la list surtout si elle est importante ...
    ta liste va être recrée par itération sur celle d'origine avec le constructeur de copie.
    en gros pourquoi faire perdre du temps et de la mémoire à ton programme ?

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

Discussions similaires

  1. [AC-2007] Ajouter mes elements à ma listbox
    Par comme de bien entendu dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/01/2011, 14h36
  2. Ajouter des valeurs à une listbox multicolonnes
    Par bobosh dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/10/2008, 09h23
  3. [VB.Net 2005]Ajouter un élément à une listbox
    Par DonF dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/09/2006, 13h07
  4. comment ajouter un element à une JList
    Par belassel_z dans le forum Composants
    Réponses: 1
    Dernier message: 20/05/2006, 12h13

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