Variablen übergeben, kommt aber nicht an...



  • hallo, ich möchte eine Variable von einem Dialog in einen anderen übergeben, habe dazu was in der suche gefunden, aber es scheint bei mir nicht so richtig zu klappen... was ist denn falsch?

    Code im ersten Dialog:

    void C1Dialog::OnOK()
    {
    C2Dialog dlg2;
    C1Dialog dlg1;
    dlg2.m_WertDlg2=dlg1.m_WertDlg1;
    C1Dialog::OnOk();
    dlg2.DoModal;
    }
    

    und wenn ich nun im 2tenDialog mir den m_WertDlg2 anschaue, ist er müll
    (-85usw oder sowas...);

    Die Header sind includiert.
    Und die Variable m_WertDlg1 ist unter Dialog1.h

    class Dialog1 : public CDialog
    {
    public:
        Dialog1(CWnd* pParent = NULL);
    //Dialogfelddaten
        //{{AFX_DATA(Dialog1)
        enum { IDD = IDD_Dialog1 };
        CString m_FileName;
        int m_WertDlg1;
    ...
    

    die Variable m_WertDlg2 unter Dialog2.h

    class Dialog2 : public CDialog
    {
    public:
        Dialog2(CWnd* pParent = NULL);
    //Dialogfelddaten
        //{{AFX_DATA(Dialog2)
        enum { IDD = IDD_Dialog2 };
        CString m_FileName2;
        int m_WertDlg2;
    ...
    

    was mache ich denn da verkehrt? 😮 😞



  • Du erstellst dlg1:
    C1Dialog dlg1;
    Da steht aber nix drin, ausser evtl. Müll.
    Und den übergibst du:
    dlg2.m_WertDlg2=dlg1.m_WertDlg1;
    Wenn in m_WertDlg2 jetzt der selbe Müll steht, arbeitet dein Programm korekt.



  • nein steht leider nix, im ersten dlg1.m_WertDlg1: 922196 und im zweiten
    dlg2.m_WertDlg2: -858993460

    void C1Dialog::OnOK()
    {
    C2Dialog dlg2;
    
    dlg2.m_WertDlg2=m_WertDlg1;
    C1Dialog::OnOk();
    dlg2.DoModal;
    }
    

    vielleicht gefällt dir ja das besser, aber das slebe Problem 😡



  • Wie sieht es aus, wenn du zu Testzwecken mal das proberst?

    void C1Dialog::OnOK() 
    { 
        C2Dialog dlg2;
        m_WertDlg1 = 24;
        dlg2.m_WertDlg2=m_WertDlg1; 
    //  C1Dialog::OnOk(); 
        dlg2.DoModal; 
    }
    

    In m_WertDlg2 sollte dann Vierundzwanzig stehen, allerdings auch nur so lange, wie der zweite Dialog zu sehen ist. Nicht später an irgendeiner anderen Stelle im Programm, wenn der zweite Dialog schon wieder verschwunden ist.



  • ich habe im 2ten Dialog einen Button, in dem ich den Breakpoint gesetzt habe, und dort ist der m_WertDlg2 wieder = -858993460

    unterbrechung im 2.Dialog:

    void Dialog2 : : OnButton1()
    {
    m_WertDlg2;
    }//hier ist der Breakpoint
    


  • Nanu... da oben erzeugst du ein Objekt der Klasse C2Dialog:
    C2Dialog dlg2;
    Und darüber rufst du den zweiten Dialog auf.
    Hier zeigst du einen Code aus der Klasse Dialog2:
    void Dialog2 : : OnButton1()
    Wenn das wirklich verschiedene m_WertDlg2 - Variablen sind, ist klar, dass da was unterschiedliches drin steht. Andererseits frage ich mich, warum der Debugger da vorbei kommt, wenn das eigentlich eine ganz andere Klasse ist...



  • sorry vertippt... 😃
    es heisst:

    void C2Dialog : : OnButton1()
    {
    m_WertDlg2;
    }//hier ist der Breakpoint
    


  • Mist, jetzt ist wieder unklar, warum es nicht klappt.
    Jetzt fällt mir nur noch ein, die Variable mal richtig zu "benutzen" anstatt sie da einfach nur so stehen zu haben:
    int i = m_WertDlg2;
    und dann mal gucken, was in i steht. Und den Breakpoint würde ich genau auf diese Zeile setzen und nicht irgendwo dahinter. Und dann mit F10 weiter gehen.
    Naja, und als letztes bleibt nur die Hoffnung, dass es nach
    Erstellen -> Bereinigen
    Erstellen -> Alles neu erstellen
    funktionisrt...


Anmelden zum Antworten