Eine Stuktur füllen aus zwei Dialogen



  • Hallo,

    ich habe ein Problem eine Struktur aus zwei verschiedenen Dialogen zu füllen, was wenn es irgendwie funktionieren würde mir das Leben echt erleichtern würde.

    Na dann versuche ich mal das Problem zu beschreiben.
    Ich habe eine Dialogbasierende Anwendung mit Namen DatenDlg in dessen Header ich eine Struktur angelegt habe.
    Jetzt habe ich einen weiteren Dialog angelegt mit Namen AuswahlDaten.

    Das Problem was ich habe ist, aus dem zweiten Dialog (AuswahlDaten) nicht in der Lage bin die Struktur in DatenDlg zu füllen.

    Von DatenDlg auf AuswahlDaten zuzugreifen ist kein Problem...

    Kann mir jemand dabei helfen ?

    Viele Grüße
    Stefan



  • hallo 😉

    soweit ich mich erinnern kann, kann man auf das application-objekt global zugreifen. erstell doch ein Objekt der Struktur in dieser Klasse und füll es von den Dialogen aus.

    ist zwar nicht so schön, mit ner MVC wäre es wohl einfacher zu warten, aber so bleibt es relativ simple, auch vom aufwand her.

    oder du erstellst dein app gleich als Doc/View ...

    oder aber du schaust dir mal, z.b. bei wikipedia, das Observer-Pattern an.

    grüße, Xantus



  • Hallo Xantus,

    erst einmal Danke für Deine Antwort.
    Leider funktioniert das ganze noch nicht so, wie ich es gerne hätte.
    Ich kann zwar auf die Struktur aus dem zweiten Dialog zugreifen, aber nach dem der mit OnOK() geschlossen wurde, sind die Daten weg.

    Vielleicht ein paar Details :

    Basisanwendung : TestDlG

    in dessen Header :
    _________________________________
    private:
    CDialog_1 m_CDialog_1;

    public :

    struct tteststruct
    {
    CString csText_1;
    CString csText_2;
    };

    tteststruct m_tteststruct;
    __________________________________

    Dialog_1 eingefügt :
    In der Funktion OnInitDialog(...)
    __________________________________

    CTestDlg m_CTestDlg;

    m_CTestDlg.m_tteststruct.csText_1 = "Hallo";

    m_CTestDlg.uiTest = 1;
    __________________________________

    Liegt das Phänomen, das die Daten gelöscht werden, vielleicht daran das das Objekt auf die Klasse CTestDlg innerhalb der Funktion erstellt worden ist ?
    Leider kann ich das Objekt der Klasse nicht im Header von Dialog_1 erstellen.
    Da meckert der Compiler mit mir.

    Bitte entschuldige meine dumme Fragen und mein Unwissen, ich bin leider nur Hobbyprogrammierer und bis jetzt bin ich immer damit ausgekommen, vom Hauptdialog Daten vom Nebendialog holen zu müssen und das geht ganz gut.

    Vielen Dank Stefan



  • Wenn Du m_CTestDlg in OnInitDialog() definierst, dann ist das ein lokales Objekt in OnInitDialog() und wird bei Beendigung destruiert. Das wird auch kein Klassenmember von CTestDlg, indem Du ein m_ davor schreibst. Wo rufst Du denn überhaupt m_CTestDlg.DoModal() auf?
    Normalerweise sieht so ein Datenübernahme-aus-Dialog-Konstrukt ja so in der Art aus:

    struct Person
    {
        CString name;
        CString beruf;
    };
    
    Person person;
    
    CTestDlg testDlg;
    if (testDlg.DoModal() == IDOK)
    {
       person.name = testDlg.GetName();
       person.beruf = testDlg.GetBeruf();
    }
    


  • Sind doch Grundlagen.

    Verwalte Deine Daten mit einer Klasse und Getter/Setter.

    Die Instanz (wird im ersten Dialog erstellt) gibst Du dann an den 2tern Dialog weiter.


Anmelden zum Antworten