HILFE Variable bleibt 0



  • Ich habe zwei DLG Klassen in der ich von der Klasse AdditionDlg
    die Klasse AnzahlDlg aufrufe.
    m_nehme_Anzahl ist eine Membervariable der Klasse AdditionDlg

    void AdditionDlg::OnBUTTONOption() 
    {
    AnzahlDlg myDlg;
    myDlg.DoModal();//neuer Dialog wird geöffnet
    //AdditionDlg bleibt im Hintergrund offen
    
    }
    

    Dort habe ich ein Editfeld vom Typ int wo ich etwas eingeben kann.
    Übergeben tue ich die Variable so >>neu<< ist eine Abgeleitete Klasse von
    AdditionDlg

    void AnzahlDlg::OnWeiter() 
    {
    UpdateData(TRUE);//wert wird in die Variable geschrieben
    neu.m_nehme_Anzahl = m_Anzahl_gestellt;//wert wird in die andere Klasse geschrieben
    AnzahlDlg::EndDialog(-1);//Dialog wird geschlossen
    
    }
    

    Erwähnt soll sein das die Klasse
    AdditionDlg nicht geschlossen wird

    Der Aufruf der Variable erfolgt wie immer und wird in einer
    MessageBox zum Test ausgegeben

    void AdditionDlg::OnAufgabe() 
    {
    
        CString Textausgabe;//Dekleration
        Textausgabe.Format("%d",m_nehme_Anzahl);//Formatierung
        MessageBox(Textausgabe);//Testausgabe
    
    Zeitrueckgabe_Rechenzeit[0] = 0;//Array wird mit Wert 0 gesetzt
    Zeitrueckgabe_Rechenzeit[1] = 0;//keine schleife da Werte später
    Zeitrueckgabe_Rechenzeit[2] = 0;//geändert werden
    Zeitrueckgabe_Rechenzeit[3] = 0;
    Zeitrueckgabe_Rechenzeit[4] = 0;
    
    SetTimer ((UINT) 2, 100, NULL ); //setzt Timer auf 1/10 sec
    GetDlgItem(IDCANCEL)->EnableWindow(FALSE);//Abbruchbutton wird deaktiviert
    cToolBar.ShowWindow(SW_HIDE);//Toolbar wird ausgeblendet
    ...
    ...
    ...
    

    Mein eigendliches problem ist das die Zahl nicht übergeben wird und die
    Ausgabe immer 0 bleibt
    Ich bekomme keine FM
    Habe ich einen Denkfehler?

    Danke
    Vossy



  • Also, du solltest abfragen ob der Dialog mit ok beendet wird:

    if(myDlg.DoModal == IDOK)
    m_var = m_neuevar;
    

    Devil



  • Übergib doch einfach bei myDlg.DoModal(); den this-Zeiger. Diesen kannst du dir dann bei myDlg::DoModal(CWasAuchImmer lpoDlg) in deiner Klasse benutzen/Speichern, was immer du willst!



  • Danke euch aber

    devil81
    ich sehe in deiner Prüfung keinen sinn da ich OnOK nicht nutze.

    zu Hexagon

    Deine Idde ist gut aber selbst da funktioniert das nicht
    Hast du noch eine Idee

    Schon hundert mal gemacht und das geht jetzt hier nicht.
    Das ist schon zum ärgern. So etwas einfachen und ich hänge.
    Andere Übergaben funktionieren doch auch in meinem Prog.
    Warum hier nicht

    Vossy



  • Du Hexagon

    schreibe mal deine Möglichkeit etwas genauer denn
    vieleicht mach ich ja auch einen Fehler

    Vossy



  • Er meint do sollst DoModal so überschreiben das du den this zeiger bei DoModal
    übergeben kannst

    Devil



  • Bingo! Genau so!

    void AdditionDlg::OnBUTTONOption() 
    {
    AnzahlDlg myDlg;
    myDlg.DoModal(this);//neuer Dialog wird geöffnet
    //AdditionDlg bleibt im Hintergrund offen
    
    }
    
    void AnzahlDlg::DoModal(AdditionDlg *lpoDlg)
    {
    if(IDOK == CDialog::DoModal())
    {
    lpoDlg->m_nehme_Anzahl = m_wie_auch_immer;
    }
    }
    

    [ Dieser Beitrag wurde am 22.10.2002 um 13:05 Uhr von Hexagon editiert. ]



  • Wäre nicht folgendes einfacher:

    void AnzahlDlg::OnOk()
    {
    AdditionDlg *lpoDlg = (AdditionDlg *)GetParent();
    lpoDlg->m_nehme_Anzahl = m_wie_auch_immer;
    }
    


  • Hallo Hexagon
    mit der Methode geht es nicht
    hat sich übrigens nicht viel von meiner unterschieden

    aber mit

    RenéG

    seiner Möglichkeit geht es
    obwohö es eigendlich das gleiche ist.

    Da ich hier heinen Haltepunkt setzen kann kann ich es
    auch nicht analysieren.

    Danke euch allen.

    Vossy


Anmelden zum Antworten