Problem mit ComboBox



  • Ich habe folgendes Problem mit einer ComboBox wenn ich was in einer Combox verändere ruft er das hier auf:

    void CHalfLifeSerialEditDlg::OnSelchangeComboLang() 
    {
        CString m_ksa;
        m_ComboLang.GetLBText(m_ComboLang.GetCurSel(), m_ksa);  
    
        if (m_ksa == "Deutsch")
        {
    
            GetDlgItem(IDC_STATIC_OPTIONEN)->SetWindowText(optionenar[0]);
            GetDlgItem(IDOK)->SetWindowText(savear[0]);
            GetDlgItem(IDCANCEL)->SetWindowText(exitar[0]);
    
        }
        else if (m_ksa == "Englisch")
        {
            GetDlgItem(IDC_STATIC_OPTIONEN)->SetWindowText(optionenar[1]);
            GetDlgItem(IDOK)->SetWindowText(savear[1]);
            GetDlgItem(IDCANCEL)->SetWindowText(exitar[1]);
        }
    
        SaveKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\MysticSoft\\HLSE","Sprache",m_ksa);
    }
    

    DAs lauft auch ganz super.

    Aber wenn ich am Programm start das auf rufe:

    CString lang = ReadKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\MysticSoft\\HLSE","Sprache");
    
        if (lang == "Deutsch")
        {
            m_ComboLang.SetCurSel(m_ComboLang.FindString(-1,"Deutsch"));
        }
        else if (lang == "Englisch")
        {
            m_ComboLang.SetCurSel(m_ComboLang.FindString(-1,"Englisch"));
        }
        else
        {
            m_ComboLang.SetCurSel(m_ComboLang.FindString(-1,"Deutsch"));
        }
    
        OnSelchangeComboLang();
    

    Giebt es eine absturtz. Das liegt an der zeile:

    OnSelchangeComboLang();
    

    Aber die brauch ich ja da sonnst nur der gewählte String geänder für aber ohne veränderung.



  • Ich weiss zwar net, wo du den Code aufrufst, mach ihn aber mal in die OnInitDialog ...



  • Also das:

    CString lang = ReadKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\MysticSoft\\HLSE","Sprache");
    
        if (lang == "Deutsch")
        {
            m_ComboLang.SetCurSel(m_ComboLang.FindString(-1,"Deutsch"));
        }
        else if (lang == "Englisch")
        {
            m_ComboLang.SetCurSel(m_ComboLang.FindString(-1,"Englisch"));
        }
        else
        {
            m_ComboLang.SetCurSel(m_ComboLang.FindString(-1,"Deutsch"));
        }
    
        OnSelchangeComboLang();
    

    wirt im OnInitDialog aufgerufen.



  • ich habe was festgestellt. Es leibt nicht an dem

    OnSelchangeComboLang();
    

    Sondern an dem Arrays. Denn wenn ich das :

    CString m_ksa;
        m_ComboLang.GetLBText(m_ComboLang.GetCurSel(), m_ksa);  
    
        if (m_ksa == "Deutsch")
        {
            /*
            GetDlgItem(IDC_STATIC_OPTIONEN)->SetWindowText(optionenar[0]);
            GetDlgItem(IDOK)->SetWindowText(savear[0]);
            GetDlgItem(IDCANCEL)->SetWindowText(exitar[0]);
            */
    
        }
        else if (m_ksa == "Englisch")
        {
            /*
            GetDlgItem(IDC_STATIC_OPTIONEN)->SetWindowText(optionenar[1]);
            GetDlgItem(IDOK)->SetWindowText(savear[1]);
            GetDlgItem(IDCANCEL)->SetWindowText(exitar[1]);
            */
        }
    
        SaveKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\MysticSoft\\HLSE","Sprache",m_ksa);
    

    so ausklammere dann geht alles super. Aber wo kann das Problem liegen die Arrays habe ich so erstelt:

    CStringArray optionenar;    
            optionenar.Add("Optionen");
        optionenar.Add("Options");
    
        CStringArray savear;
        savear.Add("Speichern");
        savear.Add("Save");
    
        CStringArray exitar;
        exitar.Add("Beenden");
        exitar.Add("Exit");
    


  • wo erstellst du die arrays und wo deklarierst du die CStrinArray-Variablen? Für mich sieht das so aus, als sind deine CStringArray-Variablen lokal!!



  • Also das:

    CStringArray optionenar;    
        optionenar.Add("Optionen");
        optionenar.Add("Options");
    
        CStringArray savear;
        savear.Add("Speichern");
        savear.Add("Save");
    
        CStringArray exitar;
        exitar.Add("Beenden");
        exitar.Add("Exit");
    

    steht im OnInitDialog .



  • jo, die arrays sind loakl erstellt. nach OnInitDialog gibts die nimmer.



  • Das kann ja nicht sein: Denn wenn ich die ComboFunktion Manuel ausführe dann geht es ja. (Eigentlich steht in OnInitDialog nur:

    optionenar.Add("Optionen");
        optionenar.Add("Options");
    
        savear.Add("Speichern");
        savear.Add("Save");
    
        exitar.Add("Beenden");
        exitar.Add("Exit");
    

    in der......dlg.h steht an der richtigen stelle:

    CStringArray optionenar;
        CStringArray savear;
        CStringArray exitar;
    

    )

    Aber es geht Trotzdem nicht aber son sind sie ja nich lokal.



  • dann solltest du vielleicht nicht sagen, dass du den ganzen Code, samt Variablendeklaration in der OnInitDialog hast, oder ?!



  • Ja ok hast recht. Aber weist trotzdem keine Rat?



  • So ich Poste mal alles noch mal im zusammenhang:

    in der ..dgl.h

    CStringArray optionenar;
        CStringArray savear;
        CStringArray exitar;
    

    in OnInitDialog()

    m_ComboLang.AddString("Deutsch");
        m_ComboLang.AddString("Englisch");
        m_ComboLang.SetCurSel(m_ComboLang.FindString(-1,"Deutsch"));
    
        CString lang = ReadKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\MysticSoft\\HLSE","Sprache");
    
        if (lang == "Deutsch")
        {
            m_ComboLang.SetCurSel(m_ComboLang.FindString(-1,"Deutsch"));
        }
        else if (lang == "Englisch")
        {
            m_ComboLang.SetCurSel(m_ComboLang.FindString(-1,"Englisch"));
        }
        else
        {
            m_ComboLang.SetCurSel(m_ComboLang.FindString(-1,"Deutsch"));
        }
    
        OnSelchangeComboLang();
    
        optionenar.Add("Optionen");
        optionenar.Add("Options");
    
        savear.Add("Speichern");
        savear.Add("Save");
    
        exitar.Add("Beenden");
        exitar.Add("Exit");
    

    und jetzt die OnSelchangeComboLang() funktion:

    void CTestDlg::OnSelchangeComboLang() 
    {
        CString m_ksa;
        m_ComboLang.GetLBText(m_ComboLang.GetCurSel(), m_ksa);  
    
        if (m_ksa == "Deutsch")
        {
            GetDlgItem(IDC_STATIC_OPTIONEN)->SetWindowText(optionenar[0]);
            GetDlgItem(IDOK)->SetWindowText(savear[0]);
            GetDlgItem(IDCANCEL)->SetWindowText(exitar[0]);
    
        }
        else if (m_ksa == "Englisch")
        {
            GetDlgItem(IDC_STATIC_OPTIONEN)->SetWindowText(optionenar[1]);
            GetDlgItem(IDOK)->SetWindowText(savear[1]);
            GetDlgItem(IDCANCEL)->SetWindowText(exitar[1]);
        }
    
        SaveKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\MysticSoft\\HLSE","Sprache",m_ksa);
    }
    


  • Du rufst erst die FUnktion auf und füllst das array danach! Ist doch klar, dass beim funktionsaufruf das array noch leer ist!


Anmelden zum Antworten