Récupérer valeur d'une ComboBox avec GetCurSel() et GetLBText() (ERREUR C2228) [Résolu]

Signaler
Messages postés
49
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
15 septembre 2005
-
Messages postés
49
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
15 septembre 2005
-
Bonjour a tous, j'ai un problème avec une combobox, je desire récupérer la valeur sélectionnée pour faire un traitement particulier, voici le code :

#include
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string>
#include <fstream>
#include
#include <cstdlib>

void MaFonction()
{
CString nom_client ;
int nIndex = Combo_Client.GetCurSel(); //erreur1


if(nIndex!=CB_ERR)
Combo_Client.GetLBText(nIndex,nom_client); //erreur2
}

erreur1 : error C2228: left of '.GetCurSel' must have class/struct/union type

erreur2: error C2228: left of '.GetLBText' must have class/struct/union type

Si qqun pouvais m'aider, Merci d'avance!!!

12 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Je suis en train de me demander si tu utilises les MFC ou pas. Quel est
le type de Combo_Client? Si c'est un HWND, ce n'est pas comme ca qu'il
faut faire. Il faut utiliser les message CB_GETCURSEL, CB_GETITEMDATA
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Les MFC je peux pas trop t'expliquer. J'en ai fait un peu mais j'ai tout oublié

Pour récupérer le texte, c'est ma faut, je crois que je t'ai donné le mauvais message, je crois que c'est plutot CB_GETLBTEXT:



char nom_client[MAX_TAILLE];



//ici je récupère le bon index

int nIndex = SendDlgItemMessage(Combo_Client,CB_GETCURSEL,0,0);

if(nIndex!=CB_ERR)

SendDlgItemMessage(Combo_Client,CB_GETLBTEXT,nIndex,(LPARAM)nom_client);



Si tu fais comme ca tu n'utilise pas les MFC, mais c'est aussi bien comme ca, si tu peux t'en passer autant le faire

<!-- @ --><link href="../../../../css/inetsdk.css" type="text/css" rel="stylesheet"><!-- @ --><style type="text/css">
PRE.clsCode { font-size:110%; }
PRE.clsSyntax { font-size:100%; }
TD DIV.clsBeta { display:none;}

A:link { color:#0000ff; text-decoration:underline;}
A:visited { color:#0000ff; text-decoration:underline;}
A:hover { color:#3366ff; text-decoration:underline;}
MSHelp\:link {
color:#0000ff;
text-decoration:underline;
cursor:hand;
hoverColor:#3366ff;
filterString: ;}
</style><link href="ms-help://Hx/HxRuntime/HxLink.css" type="text/css" rel="stylesheet"><XML id="_topicdata" pagetype="winmsg" proj="platsdk" name="CB_GETLBTEXT" pubpath="/platform/commctls/comboboxes/comboboxreference/comboboxmessages/cb_getlbtext.htm"><!-- topic data --><root></root></XML><xml xmlns:mshelp="http://msdn.microsoft.com/mshelp"></xml>
Messages postés
49
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
15 septembre 2005

Oui j'uitilise effectivement les MFC, s'il faut utiliser une autre maniere, je ne sais pas laquelle, alors peux-tu me donner un exemple suceptible de fonctionner avec les MFC!!!
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Je t'ai demandé le type de Combo_Client...

A priori avec les MFC c'est bien une notation pointée qu'on utilise
Messages postés
126
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
11 juillet 2006

si tu as definit ton combo avec class wizzard - add variables - et que ton combo est definit en control tu utilise le

int nIndex = Combo_Client.GetCurSel();

si tu as definit ton combo dans ton code avec un getdlgitem(IDC_COMBO_mycombo) essaye plutot ça

int nIndex = Combo_Client->GetCurSel();

cordialement

TOCHE
Messages postés
49
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
15 septembre 2005

C'est une Combo Box.
Messages postés
49
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
15 septembre 2005

C'est bon j'ai trouvé, il fallait bien utiliser les messages, voici le code :

void MaFonction()
{
CString nom_client ;

int nIndex = SendDlgItemMessage(Combo_Client,CB_GETCURSEL,0,0);
if(nIndex!=CB_ERR)
nom_client=SendDlgItemMessage(Combo_Client,CB_GETITEMDATA,nIndex,0);
}

Merci a tous,
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Tu sais qu'avec les MFC tu peu utiliser une classe pour les ComboBox
(CComboBox je pense). Comme tu utilises les MFC, autant aller jusqu'a
bout!
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
#include
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string>
#include <fstream>
#include

C'est étrange les MFC lol
Enfin j'dis rien j'suis pas mieux :)


void Aurevoir( void ); //Bonne journée
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Ca c'est pas beau déja, et ca n'a rien a voir avec les MFC, c'est juste
un mélange de C et de STL. Je me demande comment il fait pour utiliser
CString avec ca...
Messages postés
49
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
15 septembre 2005

Ecoutez, j'espère que vous acceptez aussi les débutants dans ce forum parce qu'en tous cas, ça n'a pas l'air. Je suis là pour apprendre alors est-ce que qqun peut m'expliquer le fonctionnement des MFC en qqes mots et surtout pourquoi cette histoire de combo n'est pas cohérente avec ce fonctionnement?

Joky je n'est pas compris ton truc sur les include!!!

De plus je n'arrive toujours pas à récupérer la valeur du combo, nom_client contient toujours une chaîne vide, je vous redonne le code :

CString nom_client ;

//ici je récupère le bon index
int nIndex = SendDlgItemMessage(Combo_Client,CB_GETCURSEL,0,0);


if(nIndex!=CB_ERR)
nom_client=SendDlgItemMessage(Combo_Client,CB_GETITEMDATA,nIndex,0);

Merci!!!
Messages postés
49
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
15 septembre 2005

Merci vecchio56, c'est bien ça et il faut surtout utiliser "char nom_client[MAX_TAILLE];" et non "CString nom_client" sinon ça ne marche pas.

Pour ce qui est des MFC, ce n'est pas grave, en espérant quand même que qqun répondra à ma question.

Merci.