CFileDialog öffnet nicht



  • Moin!

    Habe ein Problem. Seit ca. 2 Jahren habe ich kein MFC Programm mehr gesehen und bin voll aus der Sache raus. Und zwar habe ich ein normales Dialogfeld Prog erstellt. Wenn man auf einen Button klickt, öffnet der ein anderes Dialogfenster. Soweit so gut - wenn ich in dem neuen (domodal) Fenster aber auf einen Button klicke, dem ich gesagt habe, dass er den CFileDialog öffnen soll, tut dieser das nicht! Wenn cih den Code zum öffnen in den ersten Startsialog reinkopiere und dort auf den Button klcike, funzt es wunderbar.
    Ich meine das war irgendwie so, dass man dem Hauptdialog den Unterdialog bekanntmachen muss, oder sowas... Wisst ihr, was ich meine?
    ist: Dialog1 -> Button anklicken -> Dialog2 öffnet -> Button anklicken -> CFileDialog öffnet nicht 😞
    ist: Dialog1 -> Button anklicken -> CFileDialog öffnet!
    soll: Dialog1 -> Button anklicken -> Dialog2 öffnet -> Button anklicken -> CFileDialog öffnet!

    Danke!



  • Hat keiner eine Ahnung, oder soll ich mein Problem genauer beschreiben?

    Grüße



  • Zeig mal den Source für den Button2-Click-Handler...
    Hast Du auch den Klick-Handler korrekt registriert?
    z.B. ala

    ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
    

    Hält er im debugger an, wenn Du auf diese Methode einen Breakpoint setzt?



  • Das ist die Funktion, die das zweite Dialogfeld öffnet:

    CDialog BuchDlg(IDD_BUCH);
       BuchDlg.DoModal();
    

    Und das ist der Code, im zweiten Dialogfeld, der nicht aufgerufen wird:

    void CBuch::OnBuchHinzufuegen() 
    {
    	CString m_strAddDe="Buchname";
    
    	UpdateData(TRUE); 
    //Habe hier einen BREAKPOINT reingemacht...
        CFileDialog fileDlg( FALSE, _T("*.txt"), _T("DateiName"),OFN_HIDEREADONLY,_T("Textdatei (*.txt)|*.txt|"), NULL ); 
        if ( fileDlg.DoModal() == IDOK ) 
        {  
    	  CString strFile = fileDlg.GetPathName(); 
          CStdioFile* pStdioFile = new CStdioFile(); 
    
            CFileStatus status; 
            ...}
    

    Wenn ich den obigen Code in das erste Dialogfeld reinpacke, funzt es wunderbar... Ich meine dass das Problem war, dass der zweite Dialog "bekannt" gemacht werden musste!?
    Wenn ich bei besagter Stelle einen Breakpoint reinmache meckert er, dass er deaktiviert werden musste!



  • Hält der Debugger in der "OnBuchHinzufuegen"?



  • Ne! Dort macht er garnichts, denn wenn ich da einen reinmache, dann kommt ne Fehlermeldung, dass der Punkt deaktiviert wurde 😑



  • Dann hast Du das "ON_BN_CLICKED" nicht in die Msg-Map eingetragen...
    Hast Du das Klick-Ereignis nicht über den Resource-Editor erzeugt?



  • Ich habe den Quellcode mal hochgeladen, vielleicht kann sich das mal jemand angucken...
    http://temp.kistenkiller.net/copy_Bibliothek.rar

    Danke!



  • Funktioniert es bei jemandem? Oder hat jemand den Fehler gefunden?



  • Kann es sein, dass es statt

    void CBibliotheksverwaltungDlg::OnBuch() 
    {
       CDialog BuchDlg(IDD_BUCH);
       BuchDlg.DoModal();
    }
    

    so heißen sollte?

    void CBibliotheksverwaltungDlg::OnBuch() 
    {
       CBuch BuchDlg(IDD_BUCH);  // hier die Klasse CBuch nicht CDialog?!
       BuchDlg.DoModal();
    }
    

    Da ich kein Express oder 2005 besitze, kann ich es leider nicht testen.



  • Ich habe es ja auch mit VS5 kompiliert... Werde deinen Tip mal ausprobieren, sonst probiere ich es ncohmal mit VS2005.



  • Hallo,
    wie vorher schon gesagt, es soll :

    CBuch* BuchDlg = new CBuch();
    BuchDlg->DoModal();

    und die CBuch Klasse soll noch um OnInitDialog() ergenzt werden,
    und in die BibliotheksverwaltungDlg.cpp soll noch
    #include "Buch.h" eingefügt werden damit Du auch CBuch verwenden kannst!

    ich hab dein Projekt ausprobiert und es läuft gut!

    grüsse
    pixel



  • Vielen Dank!


Anmelden zum Antworten