2008-12-18 14 views
0

我用2個CStringList對象編碼。每個人都有自己的數據,例如一個人有姓名和其他的phoneno,並且兩者都是同步的,即如果有phoneno,就有名字,反之亦然。MFC中的CStringList

現在,我有2個組合框,其中我顯示名稱和各自的phonenos。名稱組合框是排序的,因此兩者之間的同步進行折騰。因此,對於分選我做了以下內容:


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)); 
    } 
} 

當我執行此我得到了在myPhoneComboBox的名字,而不是phonenos。

現在我有2個QNS:

  1. 怎麼來的我得到禮物的名稱列表的名稱,當我訪問PHONELIST?是不是一個違反,因爲我能夠使用其他變量訪問其他變量數據。

  2. 如何排序第二個列表。

+0

這兩個列表是CStringList對象。 – Raghu 2008-12-18 05:50:51

+0

我認爲你的問題缺乏太多的情境化。你用什麼方法來做到這一點?你想做什麼? – sergiol 2014-06-23 23:55:33

回答

1

我希望你使用CStringArray而不是CStringList。 您需要使用FindIndex而不是Find,因爲Find將返回OBJECT Pos而不是索引count .... 並且獲取帶有數組的元素簡單[]操作符。 如果您仍希望使用CStringList,然後通過Iterator查找一個List中字符串的第一個匹配的索引計數,並使用該IndexCount的FindIndex來獲取第二個列表的Postition對象以將GetAt用於第二個列表。

+0

沒有得到你....我沒有索引(即使我有從myNameComboBox索引,字符串列表和組合框元素不同步,因爲組合框元素排序...) – Raghu 2008-12-18 05:48:32

+0

我正在使用CStringList不是CList或CArray。 :( – Raghu 2008-12-18 05:52:07

0

爲什麼你有2個單獨的列表?爲什麼不一個CTypedPtrArray的結構同時擁有名稱和電話號碼?

0

這是一個瘋狂的,原諒我,愚蠢的方式來找到名字。它假定名稱是唯一的。上帝幫助我,我必須處理這些事情,名字領域永遠不應該被視爲獨特的,它的血腥危險。只是問我的爸爸Baash05 Sr.

我會假設應用程序添加到組合框中有一個ID或一些數據集。請在你的地圖中使用它。我的猜測是程序員將數據設置爲名稱的ID或指向包含該名稱的對象的指針。 (人物/業務對象/學生對象...)。

如果添加名稱的代碼沒有增加方法來分辨George Forman和他的任何孩子之間的差異,那麼向老闆提出一個論點,應該改變它的實現方式,因爲上帝應該是!

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