switch



  • Hallo, Leute. Brauche Ihre Hilfe. Also, ein ComboBox. Man wählt einen Wort
    aus ComboBox1.Dann klickt auf Button und in ComboBox2 wirt geladen
    entsprechende Liste.Bei mir kommt immer Fehler. So mache ich dass:

    UpdateData(TRUE);
    CString m_sComboBox1; //Value-Variable CComboBox1
    switch(m_sComboBox1)
    {
    case "Wort_1":
    bla-bla-bla;
    break;
    case "Wort_2":
    bla-bla-bla-;
    break;
    ...
    }
    

    Und bekomme Fehlermeldung:

    error C2450: switch expression of type 'CString' is illegal
    error C2051: case expression not constant
    

    Ich danke voraus.



  • Sagt die Fehlermeldung ja schon.

    Man kann switch keinen CString geben.

    versuche es z.B. mit einer

    if(m_sComboBox1 == "Wort_1")
    {
    }

    if(m_sComboBox1 == "Wort_2")
    {
    }

    Es gibt sicher noch bessere Lösungen aber da müsste man mal dein Gesamtkonzept kennen.



  • hmmm

    ausser die liste hat die gleiche reihenfolge
    dann kannst du ja die zeilenposition nehmen
    und dann switch machen
    sprich in der liste in ganz oben
    dann switch case 0
    usw

    oder du machst define z.b.
    define wort_1 = 0
    wort_2 = 1
    und dann switch

    es gibt viele möglichkeiten

    PS sag was du nimmst



  • Es ist sowieso *die* Regel, sich niemals auf UI-Strings zu verlassen. was passiert, wenn z.B. jemand deine Anwendung nach türkisch portiert?

    Für Comboboxes heißt das: jedem String mit SetItemData einen ID zuordnen - und über den kannst du dann switchen (aber das ist nurein netter Nebeneffekt).



  • Also, da bin ich wieder. Ich habe probiert mit GetItemData, kommt aber Warning:

    Debug Assertion Failed!
    

    Da ist Code:

    ...
    int i, iWahl;
    for(i=0; i <= m_ctlCombo.GetCount(); i++)
    {
    iWahl = m_ctlCombo.GetItemData(i);
    
    switch(iWahl)
    {					
    case 0:
    ...
    MessageBox((LPCTSTR)iWahl, "", MB_OK); //Überprüfen, ob kommt überhaupt was heraus
    break;
    case 1:
    ...
    MessageBox((LPCTSTR)iWahl, "", MB_OK); //Überprüfen, ob kommt überhaupt was heraus
    ...
    }
    }
    

    Und MessageBox kommt immer leer. Was soll ich jetzt tun?
    Ich danke voraus.



  • Du kannst nen int nicht einfach "blind" nach LPCTSTR casten ... atof, CString::Format oder ähnliches.



  • Kannst du mir zeigen, wie
    konvertiert man einen Integer nach LPCTSTR ?
    Und eigentlich, dass ist nicht so wichtig.
    Trotzdem in zweite ComboBox kommt immer die gleiche.
    MessageBox ist hier nur für Überprüfung.

    Also, ein ComboBox. Man wählt einen Wort 
    aus ComboBox1.Dann klickt auf Button und in ComboBox2 wirt geladen 
    entsprechende Liste
    


  • CString IntToCString(int iVal){CString sStr; sStr.Format("%d",iVal);return sStr);
    
    MessageBox(IntToCString(iWahl), "", MB_OK);
    


  • Also, jetzt mein MessageBox funktioniert.
    Und es zeigt, das Problemm wie frühe liegt in
    for oder switch. Ich denke in for, weil
    MessageBox zeigt immer 0.



  • wann rufst du CComboBox::SetItemData auf?
    
    /*
     * Combo Box return Values
     */
    #define CB_OKAY             0
    #define CB_ERR              (-1)
    #define CB_ERRSPACE         (-2)
    


  • Jetzt alles funktioniert. Mit GetCurSel().
    Danke für alles. 😃


Anmelden zum Antworten