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èmes pour remplir unecombobox


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 5
    Points
    5
    Par défaut [MFC] Problèmes pour remplir unecombobox
    Bonjour,

    J'essaye de remplir un combobox dans une boite de dialogue, mais il y a une erreur lors de l'execution.

    La compilation se passe bien, j'ai regardé plusieurs exemples sans succès car j'en reviens toujours au même problème : une erreur de type "Debug Insertion Failed!" concernant le fichier afxwin2.inl.

    Mon application est la suivante : j'appelle une boite de dialogue par appui sur un bouton. Le resultat escompté est un menu déroulant rempli. Hors, après appui sur le bouton, j'ai le message d'erreur. Si je fais "ignorer", la boite s'affiche avec le menu vide.

    Voici le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void CTestCB3Dlg::OnButton1()  // appui sur le bouton
    {
    CDialCBox dlgcbox; // ma variable de boite de dialogue
     
    dlgcbox.m_cbChoix.AddString("test"); //insertion dans la variable m_cbChoix (de type CComboBox) qui cause l'erreur
     
    dlgcbox.DoModal(); // affichage de la boite avec le menu rempli
    }
    Les tutoriaux que j'ai pu trouver font la même chose, mais j'ai tout de même une erreur... Quelqu'un pourrait il eclairer ma lanterne s'il vous plait ?

    Bonne journée.

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    un grand classique ,voir faq:
    http://c.developpez.com/faq/vc/?page...ControlForward
    et mon tuto sur les MFC ,le lien est dans ma sigature en bas du post.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'etais bien loin de songer à la redéfinition de la classe CComboBox...

    Je dirai presque un truc du genre " tout ça pour ça" !! En tout cas, merci beaucoup, et désolé de ne pas avoir cherché du coté de cette FAQ.

    J'étudie ça et je me remanifeste après.

    Et surtout : merci !

  4. #4
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    c'est la solution evoluée dans l'optique de reutilisation de code .
    tu peux aussi charger ta listbox dans OnInitDialog .
    si tu as besoin des elements de la classe parent ,il suffit d'obtenir le pointeur sur la classe parent (GetParent() ) et de proceder a l'insertion.
    http://c.developpez.com/faq/vc/?page...ialogGetParent

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    J'ai essayé la redéfinition de la méthode OnInitDialog, et voilà ce que j'avais rajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    BOOL CMyDialog::OnInitDialog() 
    {
       CDialog::OnInitDialog();
     
       // TODO: Add extra initialization here
       m_cbChoix.AddString("azerty");
     
       return TRUE;
    }
    mais j'en reviens au même problème : "Debug Assertion Failed"



    J'ai aussi essayé de faire une classe MonComboBox comme dans la faq( ici : http://c.developpez.com/faq/vc/?page...ControlForward ), mais j'en reviens encore au même soucis : "Debug Assertion Failed"

    A titre informatif, voilà le code de CMonComboBox:

    Le MonComboBox.h:

    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
     
    #if !defined(AFX_MONCOMBOBOX_H__533BF892_BDEC_4386_B5DA_FFCEC098B95D__INCLUDED_)
    #define AFX_MONCOMBOBOX_H__533BF892_BDEC_4386_B5DA_FFCEC098B95D__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // MonComboBox.h : header file
    //
     
    /////////////////////////////////////////////////////////////////////////////
    // CMonComboBox window
     
    class CMonComboBox : public CComboBox
    {
    // Construction
    public:
    	CMonComboBox();
     
    // Attributes
    public:
    	int  AddString( LPCTSTR lpszItem );
     
    // Operations
    public:
    	CStringArray m_strArray;
     
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CMonComboBox)
    	public:
    	protected:
    	virtual void PreSubclassWindow();
    	//}}AFX_VIRTUAL
     
    // Implementation
    public:
    	virtual ~CMonComboBox();
     
    	// Generated message map functions
    protected:
    	//{{AFX_MSG(CMonComboBox)
    		// NOTE - the ClassWizard will add and remove member functions here.
    	//}}AFX_MSG
     
    	DECLARE_MESSAGE_MAP()
    };
     
    /////////////////////////////////////////////////////////////////////////////
     
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
     
    #endif // !defined(AFX_MONCOMBOBOX_H__533BF892_BDEC_4386_B5DA_FFCEC098B95D__INCLUDED_)
    Et MonComboBox.cpp :
    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
     
    // MonComboBox.cpp : implementation file
    //
     
    #include "stdafx.h"
    #include "TestCB3.h"
    #include "MonComboBox.h"
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
     
    /////////////////////////////////////////////////////////////////////////////
    // CMonComboBox
     
    CMonComboBox::CMonComboBox()
    {
    }
     
    CMonComboBox::~CMonComboBox()
    {
    }
     
     
    BEGIN_MESSAGE_MAP(CMonComboBox, CComboBox)
    	//{{AFX_MSG_MAP(CMonComboBox)
    		// NOTE - the ClassWizard will add and remove mapping macros here.
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    /////////////////////////////////////////////////////////////////////////////
    // CMonComboBox message handlers
     
     
    int CMonComboBox::AddString(LPCTSTR lpszItem)
    {
        // si la listbox est valide appel de la fonction d'origine. 
        if(m_hWnd!=NULL) return CComboBox::AddString(lpszItem);
        m_strArray.Add(lpszItem);
        return LB_ERR;
    }
    void CMonComboBox::PreSubclassWindow() 
    {
    // TODO: Add your specialized code here and/or call the base class
    CComboBox::PreSubclassWindow();    
        for(int i=0;i<m_strArray.GetSize();i++) AddString(m_strArray[i]);
    }
    Et donc paf, erreur, dès que je fais ça dans mon prog principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	CDialCBox dlgcbox;
    	dlgcbox.m_cbChoix.AddString("azerty");
    	dlgcbox.DoModal();
    Bon, là je commence quand même à me tapper la tête contre un mur

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    m_cbChoix pointe sur une combobox qui n'existe pas avant le domodal (Et qui n'exxiste plus après).

    Tu ne peux la tripoter qu'entre le début et la fin du DoModal(). (Dans le OnInitDialog(), par exemple... Mais dans ce cas, il faut retirer le addstring du programme principal...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    si ce code ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    BOOL CMyDialog::OnInitDialog()
    {
       CDialog::OnInitDialog();
     
       // TODO: Add extra initialization here
       m_cbChoix.AddString("azerty");
     
       return TRUE;
    }
    ce n'est pas normal .
    ça veut dire que m_cbChoix n'est pas correcte :
    pas attacher par classwizard a son controle ,ou identifiant incorrect
    ou style de la listbox incorrecte.
    il faudrait que tu indiques le code de l'assertion rencontré.


  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour et mes meilleurs voeux à toutes et à tous pour 2006,

    Mon problème est à priori résolu, je pencherai pour une mauvaise mise en place du message OnInitDialog ( mais ce n'est pas sûr ).
    Je mets le sujet en Résolu.

    Merci à tous en tout cas .
    Alexandre.

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

Discussions similaires

  1. [VBA-E] Problème pour remplir une listbox multicolonne
    Par SFrane dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/05/2007, 16h55
  2. Problème pour remplir un tableau.
    Par sandball22 dans le forum C
    Réponses: 2
    Dernier message: 02/05/2007, 14h54
  3. [VBA-Excel]Problème pour remplir une listview
    Par Le Djé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2006, 16h27
  4. [MFC]Problèmes pour orienter du texte
    Par Deedier dans le forum MFC
    Réponses: 1
    Dernier message: 25/03/2005, 16h15
  5. [MFC]Problème pour afficher une image.
    Par Deedier dans le forum MFC
    Réponses: 4
    Dernier message: 25/03/2005, 16h13

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