Hauptdialog aus abgeleitetem Unterdialog aktualisieren....



  • Hallo,
    schreibe gerade eine SDI-Anwendung.
    Hierbei gibt es einen Hauptdialog und mehrere Unterdialoge.
    Die Unterdialoge sind von dem Hauptdialog abgeleitet.
    Über die Aufrufe

    m_pDataLink->SetParent(m_pKonfigDlg);
    m_pDataLink->ShowWindow(SW_SHOW);
    

    wird der Unterdialog (m_pDataLink) im Hauptdialog (m_pKonfigDlg) aufgerufen und angezeigt. Das funktioniert auch alles so weit ganz gut.

    OK, in diesem Unterdialog kann ich über Steuerelemente diverse Einstellungen vornehmen, welche eine Veränderung von Steuerelementen im Hauptdialog hervorrufen sollen.
    z.B. Im Unterdialog einen String in eine EditBox eingeben. Diesen String möchte ich nun im Hauptdialog in einer anderen Edit-Box angezeigt bekommen.

    Vorgehensweise ist schon klar.
    eingegebenen String an Membervariable des Steuerelements im Hauptdialog übergeben.
    Hauptdialog aktualisieren!

    Und da liegt das Problem....! 😕
    mit nur UpdateData(FALSE) aktualisiere ich ja nur den Unterdialog (da befinde ich mich ja);
    mit CHauptdialog::UpdateData(False) oder ((CHauptdialog*)GetParent())->UpdateData(FALSE)
    scheint zwar die Aktualisierung zu klappen (Return != 0), aber die Änderungen werden im Hauptdialog nicht angezeigt. 😕

    Woran kann das liegen? Welche Fkt muss ich noch aufrufen?

    Danke für eure Hilfe.

    Gruss
    S.



  • Hi,

    ist denn der Wert in der Membervariablen vom Hauptdialog überhaupt angekommen?
    Wie übergibst du den?

    ((CHauptdialog*)GetParent())->m_strVar;
    

    liess den doch einfach danach vom unterdialog mal wieder aus und
    schau was drinsteht.
    Vielleicht musst du auch noch nen Invalidate() machen, damit sich das
    fenster aktualisiert. Aber eigentlich macht das UpdateData(false) schon
    von alleine..

    hast du es mal mit

    (((CHauptdialog*)GetParent())->GetDlgItem(IDC_TEXT))->SetWindowText("blubb")
    

    versucht? geht das?



  • Hallo und DANKE,
    der wert ist bei der Member nie angekommen. Das war das Problem.
    Aber jetzt noch mal für mein Verständnis.

    Also, ich HATTE die Zuweisung aus dem Unterdialog einfach über die Membervariable vorgenommen. Was doch eigentlich gehen MÜSSTE, da der Unterdialog ja vom Hauptidalog abgeleitet ist, oder?
    Also z.B. aus dem Unterdialog

    m_strHint = "Test";
    

    weist der Hauptdialog-Membervariablen m_strHint den Wert zu.
    Das hat ja irgendwie nicht funktioniert, warum?

    Über:

    ((CKonfigurationDlg*)GetParent())->m_strHint = "so funktioniert es"
    ((CKonfigurationDlg*)GetParent())->UpdateData(FALSE);
    

    klappt das und die Variable besitzt den Wert und über die UpdateData-Fkt wird auch der Dialog aktualisiert.

    Vielleicht kann mir ja jemand noch meinen -Denkfehler- (oder Unwissen 😞 ) erklären...!

    Danke und bis zum nächsten Problem....!

    Gruss
    S.



  • Hi,

    Was doch eigentlich gehen MÜSSTE, da der Unterdialog ja vom Hauptidalog abgeleitet ist, oder?

    Nein. Du KANNST ihn davon ableiten, warscheinlicher ist aber eher, wenn du es mit dem Assistenten erzeugt hast, das dein Dialog von CDialog abgeleitet ist, kannste ja mal im Header vom unterdialog nachsehen.

    Aber auch wenn du deinen Unterdialog von deinem Hauptdialog ableiten würdest, würde das nicht funktionieren. Du erstellst ja eine neue Instanz deiner Unterdialog-Klasse. Diese bekommt zwar einen Pointer auf ihre Parent-Instanz (zu benutzen mit GetParent) ist aber ansonsten komplett eigenständig, du hast also 2 eigenständige Objekte von denen nur das eine weiß welchem es untergeordnet ist.

    ich hoffe das ist so einigermaßen richtig erklärt..

    mfg
    tobi


Anmelden zum Antworten