DDX und Modale Dialoge



  • Mit Dialog1 dlg1; erstellst du doch einen neuen Dialog! Du musst schon die selbe variable verwenden, die du auch bei DoModal nimmst

    Vielleicht bin ich zu blöd 😢 , aber wie kann ich dann auf Klasse von Dialog1 zugreifen wenn ich kein Objekt von die Klasse erzeuge ?!?!



  • Außerdem nehme ich bei DoModal() doch die variable von dem Dialg2 und den String ist im Dialog1 und da habe ich doch kein DoModal().
    Also noch mal was ich mache ist, aus einem Modalem Dialog1 rufe Modalen Dialog2 und in diesem Dialog2 will die werte von Dialog1 anzeigen so:
    Dialog1

    void Dialog1Dlg::OnWeiter() 
    {   
        m_cds.GetWindowText(m_strs);//Wert für Dialog2
        m_lb.GetWindowText(m_ve);   // Wert für Dialog2
        m_dlg2.DoModal(); 
    }
    

    Dialog2

    m_p.GetWindowText(m_dlg1->m_strs);
    

    Was mache ich falsch



  • Vielleicht ist das für euch Profi kein Problem aber ich komme nicht um herum.
    Bitte um Hilfe oder mindestens ein Hinweis
    Vielen Dank



  • Logisch ... Mein Denkfehler, dachte es wär anders rum.

    Dann mach das doch so:

    In Dialog2 machst du eine Membervariable vom Typ Dialog1*, also ein Zeiger auf Dialog1. Die Headerdatei von Dialog1 bindest du in die cpp-datei von Dialog2 ein. Dann weisst du dieser variable den this-Zeiger von Dialog1 zu. und dann greifst du in Dialog2 über diesen Zeiger auf Dialog1 zu:

    Dialog2Dlg.h

    class Dialog1Dlg; //Vorwärtsdeklaration für Dialog1
    class Dialog2Dlg
    {
    //...
    private:
        Dialog1Dlg *m_pDlg1;
    public:
        int SetDialog(Dialog1Dlg *pDlg1);
    //...
    };
    

    Dialog2Dlg.cpp

    //...
    #include "Dialog1Dlg.h"
    //...
    
    Dialog2Dlg::Dialog2Dlg()
    {
        //...
        m_pDlg1=NULL;
        //...
    }
    
    int Dialog2Dlg::SetDialog(Dialog1Dlg *pDlg1)
    {
        if(pDlg1<=NULL)
            return 1;
        m_pDlg1 = pDlg1;
        return 0;
    }
    

    Dialog1Dlg.cpp

    void Dialog1Dlg::OnWeiter() 
    {   
        m_cds.GetWindowText(m_strs);//Wert für Dialog2
        m_lb.GetWindowText(m_ve);   // Wert für Dialog2
        m_dlg2.SetDialog(this);
        m_dlg2.DoModal(); 
    }
    

    Ohne Gewähr, sollte aber tun.

    Btw.: 2 Stunden warten ist kein Grund für ein rotes Gesicht, ok?

    [ Dieser Beitrag wurde am 11.04.2003 um 07:44 Uhr von dEUs editiert. ]



  • 2 Stunden warten ist kein Grund für ein rotes Gesicht, ok?

    OK und sory
    ich habe genau so wie du geschrieben hast es funk aber leider nicht

    int Dialog2Dlg::SetDialog(Dialog1Dlg *pDlg1)
    {
        if(pDlg<=NULL)// Soll hier pDLg1 stehen ???
            return 1;
        m_pDlg1 = pDlg1;
        return 0;
    }
    

    kann ich stat SetDialog(..) auch so schreiben
    m_mydlg=&MyDlg();
    wo soll ich sonst SetDialog aufrufen ?

    [ Dieser Beitrag wurde am 11.04.2003 um 07:44 Uhr von dEUs editiert. ]



  • BOOL Dilaog2::OnInitDialog()
    {
    CDialog::OnInitDialog;

    SetWindowText(m_pDlg1->Variable);

    return TRUE;
    }

    probieren diese !



  • habe vergessen:

    Konstruktor Dialog 2:

    CDialog2::CDialog2(CWnd *dlg1)
    {
    m_pDlg1=dlg1;
    }

    du müssen erstellen dialog 2 im dialog1 so:

    CDialog2 dlg(this);



  • hm... jetzt bin ganz durcheinander wie sollte es funktioniren ??



  • Original erstellt von <Modal>:
    **
    kann ich stat SetDialog(..) auch so schreiben
    m_mydlg=&MyDlg();
    **

    Ne, das is Quatsch, was soll das denn sein??
    Wo du SetDialog aufrufen musst siehst du doch im Beispielcode ... Einfac bevor du das erste Mal DoModal aufrufst.



  • Original erstellt von <Modal>:
    **if(pDlg<=NULL)// Soll hier pDLg1 stehen ???
    **

    ja



  • Danke dEUs
    Ich habe mein Problem gelöst und zwar das hat gefehlt:

    Dialog2Dlg(Dialog1Dlg pParent ); // Standardkonstruktor*


Anmelden zum Antworten