ComboBox Werte auslesen schlägt fehl



  • Was hab ich nur vergessen bzw. falsch gemacht.

    Ich brauch jetzt wirklich dringend Verstärkung. Was läuft hier schief.



  • -In CTestDoc::OnNewDocument m_dlg.DoModal() aufgerufen um das Dialogfeld IDD_TEST anzuzeigen. (funktioniert noch)

    -In CTestDoc::OnNewDocument m_combo.GetCurSel() aufgerufen.

    Setz mal spaßeshalber auf die Zeile mit DoModal nen Breakpoint (F9), Starte (F5) und wenn du aufläufst, drück F10 (Step).
    Dann überleg mal, was ich 07:26:01 geschrieben hatte. 😉



  • Hallo estartu,

    schön, dass Du mir hilfst.
    Ich hab jetzt den Breakpoint auf die Zeile DoModal gesetzt, bin mit F5 dort hingefahren, habe F10 (Step) gedrückt. Der Fehler tritt auf wenn m_combo.GetCurSel() aufgerufen wird.

    Jetzt überlege ich verzweifelt, genau gesagt seit 07:26:01 Uhr, welches Fenster nicht geöffnet sein sollte. Wahrscheinlich das Fenster auf dem die ComboBox liegt. Das wurde aber vor dem Tastendruck auf F10 nocht angezeigt.
    Es hilft auch nichts wenn ich m_dlg.DoModal gleich nach m_combo.GetCurSel() nochmal aufrufe.

    Wenn du weißt, an welcher Stelle ich gerade auf der Leitung stehe, dann sag es mir bitte.



  • Die Stelle heißt DoModal. 😃

    DoModal ruft den Dialog modal auf, das heißt, der Rest des Programmes STEHT solange der offen ist.
    Es passiert also folgendes:

    dlg.DoModal();
    

    Dialog geht auf, Restprogramm wartet, irgendwann machst du den Dialog wieder zu.

    m_combo.GetCurSel();
    

    Den Dialog hast du eben zugemacht...



  • yul97 schrieb:

    -ComboBox mit der Toolbox auf den Dialog IDD_TEST gezogen.
    ...
    -eine Objektvariable in CTestDoc namens m_combo vom Typ CComboBox erzeugt.

    Wie soll der Compiler diese Variable mit dem Steuerelement auf der Dialogressource verknüpfen? Magie?



  • Ich habs gewußt.

    Von alleine wäre ich da nie draufgekommen. Da braucht man halt Profis.

    Jetzt gibts nur noch eine kleine Schwierigkeit. Mit welchem Befehl zeige ich den Dialog so an, dass das Restprogramm nicht wartet.

    Durch Probieren der verschiedenen Methoden in CDialog könnte ich es selber herausfinden (ziemlich mühlselige Sache).

    Wo finde ich eigentlich eine vernünftige Dokumentation, in der die Methoden von z.B. CDialog gut beschrieben sind ?



  • MFK schrieb:

    yul97 schrieb:

    -ComboBox mit der Toolbox auf den Dialog IDD_TEST gezogen.
    ...
    -eine Objektvariable in CTestDoc namens m_combo vom Typ CComboBox erzeugt.

    Wie soll der Compiler diese Variable mit dem Steuerelement auf der Dialogressource verknüpfen? Magie?

    Ups, da hast du Recht. Das kommt noch dazu. (Aber die Variable in den Dialog packen und dann vom Doc aus setzen klappt nicht - s.o.)



  • Hallo,
    ich denke das dass mit dem Modallosem Dialog gehen sollte!
    Den must du dann mit Create() erstellen!

    ich denks halt 🙂

    mfg
    pixel



  • Oder eine int-Variable im Dialog für die Combobox erstellen und die hinterher vom Doc aus auslesen.



  • Danke estartu und die anderen,

    das mit der int-Variable funktioniert.

    Interessieren würde mich aber trotzdem noch die Lösung mit Create(). Da hab ich aber glaube ich heute keinen Nerv mehr dafür. Die Parameter von Create() sehen kompliziert aus.

    Wenigstens kann ich jetzt weitermachen.

    Danke nochmal.



  • Gibt es eigentlich wirklich keine Doku über die MFC-Klassen ?



  • Sicher gibt's die. Die gesamten MFC sind in der MSDN Library dokumentiert.



  • Und die findest du da: http://msdn.microsoft.com/ 🙂



  • Danke für die Tipps,

    ich habe jetzt die Ursache für das Problem herausgefunden.

    Da bin ich aber auch nur draufgekommen, weil ich wie empfohlen in der Microsoft MFC-Doku nachgeschaut habe.

    Dort wird beschrieben, dass die Zuordnung einer Variablen zu einer ComboBox in einer sogenannten MessageMap erfolgt.
    Die MessageMap wird bei mir in der Fct. DoDataExchange() definiert. (Bei mir DDX_CBString(pDX,IDC_COMBOStation,m_strCombo))

    Der Variablen-Assistent hat diese Zuordnung einfach nicht gemacht, weil ich nachträglich die ComboBox zum Dialogfeld eingefügt habe.

    Always little things, sind die Ursache für einen Riesenaufwand, stimmts.:)


Anmelden zum Antworten