Attribut übergeben



  • Hallo

    ich hab hier ne Dialoganwendung bestehend aus 2 dialogen. In den Hauptdialog, der automatisch miterstellt wird, ist ein Attribut namens "Vorsatz". Ist ein Integer.

    int Vorsatz;
    

    Wenn ich diesen Wert jedoch eingeben will, muss ich auf einen Button klicken, der wiederum einen neuen Dialog öffnet.

    Dialog2 Handle;
    Handle.DoModal();
    

    In diesem Dialog ist ein Eingabefeld, auf dessen eine Member deklariert ist.

    int m_intVorsatz;
    

    wenn ich dann auf den ok Button klicke, soll die Zahl übernommen werden

    UpdateData(TRUE);
    

    der Dialog geschlossen werden

    OnOK();
    

    und die Zahl, die ich gerade eingegeben habe, in dem Attribut von dem Hauptdialog geschrieben werden. Und genau das ist mein Problem. Wie mach ich das? Wenn ich die Instanz von dem Hauptdialog selber erzeugt hätte, würde ich die einfach mit übergeben lassen, wenn sich der neue Dialog öffnet und von dort aus dann in das Attribut schreiben. Aber geht irgendwie nicht.

    Bin dankbar für eure Hilfe



  • MSS-Software schrieb:

    Aber geht irgendwie nicht.

    Zeig mal deinen Versuch. 🙂 Vielleicht ist es nur eine Kleinigkeit.



  • ja, da fängt das Problem an *ggG*

    ich hab keine Idee

    wenn ich eine Methode nur für die übergabe unter DoModal() setze, bringt das auch nichts, weil wenn er an DoModal() vorbei ist, ist auch die Instanz nicht mehr da

    und wenn ich vor OnOK() übergeben will, müsste ich ne neue Instanz erzeugen

    das wiederum ist auch nicht hilfreich, weil ich den wert dann in der neuen Instanz habe und nicht in der alten



  • Also so wie ich das sehe hast du vergessen den Wert den du einlesen möchtest auf die member variable zu schreiben.
    Heisst: wenn du auf den OK Button klickst musst du den Wert auf die Member speichern. Dazu musst du auch eine Control-Membervariable des Editierfeldes anlegen.

    CString str;
    m_member_des_EditierfeldesC.GetWindowText(str);
    sscanf(str,"%d",&m_intVorsatz);
    
    OnOK();
    

    Jetzt hast du nach verlassen des zweiten Dialogfeldes deinen Integerwert auf der Member. Um diesen in deinem Hauptdialogfeld zu benutzen schreibts du hinter dem Handle.DoModal();

    Vorsatz=Handle.m_intVorsatz;
    

    müsste so klappen, habe es leider vorher nicht testen können.



  • MSS-Software schrieb:

    wenn ich eine Methode nur für die übergabe unter DoModal() setze, bringt das auch nichts, weil wenn er an DoModal() vorbei ist, ist auch die Instanz nicht mehr da

    Wie kommst du darauf? Sicher ist die noch da.

    Dialog2 Handle;
    Handle.DoModal();
    Vorsatz = Handle.m_intVorsatz;
    


  • erst bei

    Handle.DestroyWindow()
    

    ist sie weg



  • jo, funktioniert auch wunderbar

    thx

    ich hab jetzt ehrlich gedacht, dass die Instanz damit weg is

    aber gut

    um so besser

    thx



  • Polofreak schrieb:

    erst bei

    Handle.DestroyWindow()
    

    ist sie weg

    Nein. DestroyWindow "passiert", bevor DoModal zurückkommt. Das beeinflussst aber Wert-Member der Dialogklasse nicht.



  • 😮 dann könnte ich ja schon viel früher destroyen! muss ich gleich mal schauen!
    DANKE!



  • MFK schrieb:

    Das beeinflussst aber Wert-Member der Dialogklasse nicht.

    Genau.
    Wert-Member kann man im Nachhinein nutzen.
    Control-Member nicht.

    🙂



  • ey, dann Destroy ich aber auch

    und zwar alles *Ggg* 😕 😋


Anmelden zum Antworten