CComboBox mit zugeordneten Daten



  • Hi, ich hab mal wieder ein "kleines" Problem.
    Ich habe eine Text Datei in der Daten in dieser Form stehen :
    ...
    B;2
    C;3
    A;1
    ...
    Ich will in einer CComboList die Buchstaben sortiert ausgeben lassen und das funtzt auch :

    void CFTP2Dlg::OnSelChangeWidth(void)
    {
    
    CString str;
    
    if(GetDlgItemText(IDC_COMBO1,str))
    {
    
    c_ProjektK.ResetContent();
    m_ProEdit1.SetWindowTextA("");
    
    SetDlgItemText(IDC_EDIT1,str);
    
    CString path="C:\\IrgendeinPfad\\"+str+".txt";
    
    CStdioFile DatenLaden; 
    CString strResult2;
    CString strRes;
    
    DatenLaden.Open(path, CFile::modeRead);
    
    while(DatenLaden.ReadString(strResult2))
    {
    if(strResult2.Find(';'))
    {
    
    int index =strResult2.Find(';'); 
    
    strRes = strResult2.Left(index);
    
    }
    
    /*				
    if(strResult2.Find(';'))
    {
    int index =strResult2.Find(';'); 
    
    						strResult2=strResult2.Mid(index+1);
    }
    
    */
    // Hier kann ich mir die Zahlen angeben lassen
    
    c_ProjektKUNDE.AddString(strRes);  // Membervariable der CComboBox wird gefüllt
    
    }
    
    DatenLaden.Close();
    
    }
    
    }
    

    Dies ist der Code für die Nachrichtenbehandlung von meiner ersten CComboBox, wodurch praktisch entschieden wird welche Datei er öffnen soll und welche Daten in die zweite CComboBox soll. In dem Fall eben das A,B,C...

    Wenn ich jetzt in meiner zweiten CBox das A auswähle, soll in einem Editfeld das A und in einem anderen Editfeld die 1 angezeigt werden.Und eben bei B die 2 usw...

    Code für die Nachrichtenbehandlung der zweiten CBox:

    void CFTP2Dlg::OnSelChangeWidth2(void)
    {
    	CString str;
    
    	if(GetDlgItemText(IDC_COMBO2,str))
    
    	{
    	SetDlgItemText(IDC_EDIT2,str);
    
    	}
    }
    

    Wie kann ich jetzt die richtigen Zahlen den richtigen Buchstaben zuordnen lassen ?
    Ich vermute mal mit SetItemData/GetItemData, aber ich versteh nicht wie das gehen soll, pls help me

    Mfg toxor


  • Mod

    AddString returniert eine ID für das Item. Sofort ergänzt Du mit SetItemData den INT Wert in die ComboBox.

    Du kannst später jederzeit mit GetItemData von dem selektierten Wert die ID abfragen.



  • Hmmm aber meine zweite Funktion erhält ja gar keine Information von Addstring...

    Edit1 : Ich glaub mir bleibt nix anderes übrig als in der zweiten Funktion nochmal die Textdatei nach dem gesuchten Buchstaben zu durchsuchen und mir dann die entsprechende Zahl auszugeben...

    Edit2 : Jop habs jetzt so gemacht, funtzt ! :p


  • Mod

    Warum fügst Du jnicht sofort beim AddString die IDs mit ein, wie ich es gesagt habe?

    int index =strResult2.Find(';'); 
    strRes = strResult2.Left(index);
    
    int numToSet = _ttoi(strResult2);
    
    int n = c_ProjektKUNDE.AddString(strRes);  
    if (n!=CB_ERR)
        c_ProjektKUNDE.SetItemData(numToSet);
    


  • Also ich denkemal du meinstest

    c_ProjektKUNDE.SetItemData(index,numToSet);
    

    anstatt

    c_ProjektKUNDE.SetItemData(numToSet);
    

    weil SetItemData ja auch nen Index will. Aber funktionieren tut es selbst dann nicht so wie ich es gerne hätte, weil ich ja die Zahlen ( also die IDs ) in der nächsten Funktion brauche. Das würd wahrscheinlich mit Zeigern ganz gut gehen, aber egal ich bin mit meiner Lösung eigentlich ganz glücklich.


Anmelden zum Antworten