Problem mit ComboBox
-
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!