Probleme mit CComboBox::FindString
-
Hi,
ich würde gerne beim Aufruf eines Dialogs einen Eintrag in einer ComboBox "vorausgewählt" haben und habe das folgendermaßen versucht zu realisieren:
CComboBoxEx* pCombo = (CComboBoxEx*) GetDlgItem(1001); int nIndex; if(pCombo->FindString(0, (LPCTSTR)m_str1) != CB_ERR) // Fehler { nIndex = pCombo->FindString(0, (LPCTSTR)m_str1); pCombo->SetCurSel(nIndex); }
Allerdings bekomme ich jedesmal in der mit "Fehler" kommentierten Zeile die Meldung "Debug Assertion Failed" (offensichtlich verbunden mit einem return von CB_ERR) und kann mir keinen wirklichen Reim darauf machen, weil mein Code eigentlich einem Beispiel aus MSDN folgt.
Eine Anmerkung noch dazu:
m_str1 ist ein CString, FindString erfordert LPCTSTR. Kann es sein, dass der Cast auf LPCTSTR Probleme macht??
-
Um einen Eintrag auszuwählen reicht doch normal SetCurSel aus, also in deinem Fall:
pCombo->SetCurSel(0);
-
Panschev schrieb:
Um einen Eintrag auszuwählen reicht doch normal SetCurSel aus, also in deinem Fall:
pCombo->SetCurSel(0);
Wenn ich den Index des zu wählenden Eintrags kenne, hast du recht. Hier kenne ich aber nur den entsprechenden Eintrag (den String), möchte mir mit FindString() den zugehörigen Index ermitteln und anschließend auswählen.
Die '0' im AufrufnIndex = pCombo->FindString(0, (LPCTSTR)m_str1);
gibt nur an, ab welchem Index gesucht werden soll. Eigentlich sollte ich
nIndex = pCombo->FindString(-1, (LPCTSTR)m_str1);
schreiben, wenn ich die ganze Liste durchsuchen will.
-
Wo steht denn dieser Code?
Hast du mal den Rückgabewert von GetDlgItem geprüft?
-
CComboBoxEx* pCombo = (CComboBoxEx*) GetDlgItem(1001);
Hast du eine normale ComboBox oder erweiterte ComboBox? Gehört die 1001 auch zu deiner ComboBox oder liegt hier der Fehler?
-
Ich nutze eine ComboBoxEx. Die ID '1001' ist schon korrekt: ich habe in diesem Dialog einige ComboBoxes, deren IDs ich aufsteigend vergeben habe, um in einer Schleife darauf zugreifen zu können.
Die Rückgabe von GetDlgItem sollte ebenfalls passen: wenn ich z.B. einfach schreibe
CComboBoxEx* pCombo = (CComboBoxEx*) GetDlgItem(1001); pCombo->SetCurSel(3);
erscheint der gewünschte Eintrag in der Box.
Der Originalbeispiel-Code aus MSDN sieht so aus (Hilfe zu ComboBox::FindString):
Example// The pointer to my combo box. extern CComboBox* pmyComboBox; // The string to match. extern LPCTSTR lpszmyString; // Delete all items that begin with the specified string. int nIndex = 0; while ((nIndex=pmyComboBox->FindString(nIndex, lpszmyString)) != CB_ERR) { pmyComboBox->DeleteString( nIndex ); }
-
Panschev schrieb:
CComboBoxEx* pCombo = (CComboBoxEx*) GetDlgItem(1001);
Hast du eine normale ComboBox oder erweiterte ComboBox? Gehört die 1001 auch zu deiner ComboBox oder liegt hier der Fehler?
Hier liegt tatsächlich der Fehler. FindString scheint nur für ComboBox zu funktionieren. Für die ComboBoxEx habe ich jetzt FindStringExact verwendet. Damit funktioniert es.