[C+++ MFC] Combo Box [Résolu]

Signaler
Messages postés
25
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
26 septembre 2009
-
Messages postés
25
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
26 septembre 2009
-
Bonjour,

voilà je fais face à un petit souci concernant les combo box. (Je n'ai en fait encore jamais utilisé ce type de contrôle).

Donc j'ai placé une Combo box sur me boîte de dialogue CSetup que j'ai nommé IDC_COMBO_CATEGORY à laquelle j'ai associé une variable de type CComboBox: m_Combo_Category

Je voudrais qu'à l'affichage de cete fenêtre, il y ait un certain nombre de lignes déjà remplies dans cette comboBox, et lorsque je clique sur un bouton, récupérer l'élément sélectionné.

J'ai déjà essayé danc un premier lieu de faire

m_Combo_Category.AddString ("ma chaine");

La compilation passe, mais des qu'il s'agit d'executer cette ligne (placée dans CSetup::CSetup (CWnd*pParent)), il me sort une erreur "debug assertion failed...".

Quelle peut en être la cause? Celà vient-il d'une mauvaise utilisation de la variable CComboBox?

10 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,

Logiquement, j'aurais plutot mis le code d'initialisation du combo dans
le OnInitDialog(), car a mon avis au moment de l'appel du constructeur
de CSetup ta dialog n'est pas encore crée, et ton combobox aussi.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,

Moi je reste sur mon OnInitDialog() de la semaine derniere ;)

C'est dans cette fonction que tu dois initialiser tout les controles de
ta dialog. D'apres msdn, OnInitDialog est une methode virtuelle qu'il
suffit d'implementer dans ta classe, au même titre que OnOK ou OnCancel.

http://msdn2.microsoft.com/en-us/library/fwz35s59(VS.71).aspx
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,

En général les methodes du style 'OnQuelqueChose' sont des réponses a
des evenement, donc tu n'a pas a les appeler, c'est la dialog qui les
appelera au bon moment.
Messages postés
25
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
26 septembre 2009

Hum en fait c'est pas tant ce probleme là (en fait ce code je le mets juste apres l'initialisation des autres variables de la fenêtre....

Mon Csetup n'a pas de OnInitDialog, vu que ce n'est pas ma fenêtre principale...

En fait le souci c'est que je ne connais pas trop la façon de manipuer les Combo Box
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,

Oui ben c'est ce que je dis, au moment de l'appel du constructeur ton
combobox n'existe pas encore (je parle bien de la fenêtre windows, pas
de l'instance du CComboBox). Pour etre sur que le probleme vient bien
de la, tu peux rajouter un
ASSERT(::IsWindow(m_Combo_Category.GetSafeHwnd())) dans ton
constructeur, et voir si ca échoue en debug.

Pour le OnInitDialog(), doit forcement y avoir un moyen de le rajouter, mais la je ne peux pas t'aider.
Messages postés
25
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
26 septembre 2009

En effet, si je place ce code ailleurs (dans une fonction membre, par exemple, çà passe sans soucis... a ceci près que lq liste ne se déroule pas sur 5 ou 6 lignes, mais seulement sur une seule...
Messages postés
25
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
26 septembre 2009

Bon nouvelle semaine, nouveaux prolèmes :-)

Donc j'ai créé ma combo Box , et les éléments de celle ci se mettent à jour lorsque j'appuie sur un bouton. Celle-ci se déroule normalement, bref dans la situation actuelle, tout est OK.

Maintenant, j'aimerais que cette combo box ne s'initialise aps lorsque j'appuie sur le bouton, mais directement lors de l'affichage de la fenêtre "Setup".

Seul souci, je ne peux pas le faire depuis CSetup::Csetup.

Voici les autres méthodes qui sont dispo dans ma classe :

DoDataExchange, GetMessageMap, GetThisMessageMap, OnClickedDelete, OnClickedOverwrite, OnCheckfile (ces 3 dernières méthodes sont des méthodes que j'ai cré pour les boutons).

voici le code que je souhaiterais mettre pour initialiser mon combo box.:

DWORD dwNumeroEmploye;
CSTRING strNomEmploye;
strNomEmploye = "Vincent Tim";
dwNumeroEmploye = 1;

int nIndex

CComboBox * pBox = (CComboBox *) GetDlgItem(IDC_COMBO_CATEGORY);

nIndex = pBox->AddString(strNomEmploye);
pBox->SetItemData (nIndex,dwNumeroEmploye);

Voici aussi le code qui me sert à afficher ma fenêtre... c'est peut-être utile pour trouver une solution...

Csetup *psetup = new Csetup;
if (psetup!=NULL)
{
    BOOL ret = psetup-> Create(IDD_SETUP);
    if (!ret)
    AfxMessageBox ("erreur");
    psetup->ShowWindow(SW_SHOW);
}
Messages postés
25
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
26 septembre 2009

Je vais essayer cette méethode... En fait à la base jou voulais utiliser un autre moyen , car je n'ai jamais implémenté OnInitDialog par moi même (c'est otujours lors de la création du projet que çà se faisait).

Je vais essayer de voir comment ils font dans MSDN.

Merci pour le lien!
Messages postés
25
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
26 septembre 2009

Ah oui aussi: Où (ou plutôt quand) dois-je appeler cette fonction?

Dans Csetup::Csetup?
Messages postés
25
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
26 septembre 2009

çà marcher super!
Merci!