2008-12-18 5 views
0

Je codais avec 2 objets CStringList. Chacun a ses propres données, par exemple l'un a un nom et l'autre le phoneno, et les deux sont en synchronisation, c'est-à-dire, s'il y a un phoneno il y a un nom et viceversa.CStringList dans MFC

Maintenant, j'ai 2 combobox dans lequel je montre les noms et les phonenos respectifs. Le nom combobox est trié, d'où la synchronisation entre les deux va pour un tirage au sort. donc pour le tri je l'ai fait ce qui suit:


int aComboElementNo = myNameComboBox.GetCount(); 
if(aComboElementNo >= 1) 
{ 
    for(int aIndex = 0; aIndex < aComboElementNo; aIndex++) 
    { 
     CString aTempStr; 
     // Getting the string in the combobox 
     myNameComboBox.GetLBText(aIndex, aTempStr); 
     // Getting the position where the name is present in the list 
     POSITION aPos = aNameList.Find(aTempStr); 
     // setting the appropriate phoneno in the 2nd combobox 
     myPhoneComboBox.AddString(aPhoneList.GetAt(aPos)); 
    } 
} 

Quand je suis arrivé, j'exécuté ce le nom du myPhoneComboBox plutôt que les phonenos.

Maintenant, j'ai 2 QNS:

  1. comment se fait-je obtenir le nom présent dans namelist quand je suis accède au phonelist? n'est-ce pas une violation, puisque je suis capable d'accéder à d'autres données de variables en utilisant une autre variable. Comment trier la 2e liste.

+0

Les deux listes sont des objets CStringList. – Raghu

+0

Je pense que votre question manque trop de contextualisation. Dans quelle méthode essayez-vous de faire cela? Et qu'est-ce que tu veux faire? – sergiol

Répondre

1

J'espère que U utilise CStringArray et non CStringList. Vous devez utiliser FindIndex plutôt que Find puisque Find renverra OBJECT Pos plutôt que le nombre d'index .... et pour obtenir l'élément avec array utilisez simplement [] l'opérateur. Si vous voulez toujours utiliser CStringList, puis à travers Iterator Trouvez le nombre d'index de la première correspondance de chaîne dans une liste et utilisez FindIndex de cet IndexCount pour obtenir l'objet de postition pour la deuxième liste pour utiliser GetAt à la deuxième liste.

+0

n'a pas obtenu .... je n'ai pas l'index (même si j'ai index de myNameComboBox, la liste de chaînes et les éléments de liste déroulante ne sont pas synchronisés comme les éléments de liste déroulante sont triés ...) – Raghu

+0

J'utilise CStringList pas CList ou CArray. :( – Raghu

+0

CList.Find ne retourne pas une valeur numérique (0,1,2,3, ..), c'est un objet qui doit être utilisé pour la même liste CArray.Find fait également pareil. .FindIndex renvoie l'index (0,1,2, ...). J'espère que vous avez compris. – lakshmanaraj

0

Pourquoi avez-vous deux listes distinctes? Pourquoi pas un CTypedPtrArray de structures contenant à la fois le nom et le numéro de téléphone?

+0

la chose est la liste de noms est déjà mis en œuvre. Je ne suis pas autorisé à changer ce qui est implémenté ... :( – Raghu

0

C'est une façon un peu crade, pardonnez-moi, stupide de trouver des noms. Il suppose que les noms sont uniques. Que Dieu m'aide, j'ai dû faire face à ces choses, les champs de noms ne devraient jamais être considérés comme uniques, c'est sanglant et dangereux. Il suffit de demander à mon père Baash05 Sr.

Je suppose qu'il y a un ID ou un ensemble de données que l'application ajoute à la zone de liste déroulante. Veuillez l'utiliser dans votre carte. Ma conjecture est le programmeur mis les données soit à l'ID du nom, ou un pointeur vers l'objet qui contenait le nom. (objet personne/objet de gestion/objet étudiant ...). Si le code qui ajoute les noms n'ajoutait pas un moyen de faire la différence entre George Forman et l'un de ses enfants, alors faites un argument au boss, que sa mise en œuvre devrait être changée, parce que Dieu devrait le faire être!

int aComboElementNo = myNameComboBox.GetCount(); 
for(int aIndex = 0; aIndex < aComboElementNo; aIndex++) 
{ 
    int nameLocal = myNameComboBox.GetItemData(aIndex); 
    myPhoneComboBox.InsertString(aIndex, aPhoneList[namelocal]); 
} 
+0

Mec, j'ai mentionné les noms et les phonos comme exemple, ne les prenez pas au sérieux Dans notre projet, nous utilisons des trucs différents et ils sont uniques. attentivement et comprendre ce que le questionneur voulait dire avant de répondre .... – Raghu