Datenaustausch unter nicht modalen Dialogen



  • Hallo,

    hab folgendes Problem(stark vereinfacht dargestellt):
    Es existieren zwei nicht modale Dialoge/Dialogklassen, die hintereinander per Menü geöffnet wurden(Dlg1 und Dlg2)
    In beiden Dlgs gibt es jeweils ein Eingabefeld mit dazugehöriger Member-Variable(jeweils m_Edit1 genannt) und einen Button.
    Es soll per Buttonklick in einem Dlg der Inhalt seines Eingabefeldes in das Eingabefeld des zweiten Dlg geschrieben werden, also ein Datenaustausch zwischen 2 Dialogen bei bestimmten Events, zb Mausklicks o.ä.

    Hatte folg. Ansatz:

    1. Zeiger auf das zweiten Dlg im ersten Dlg. Bekomme auch keine Fehler beim Übersetzen. Jedoch stürzt das Programm beim eigentlichen Datenaustausch mit
      mZeigerAufDlg2->m_Edit1 .... ab.

    2. könnte die Ansichtsklasse in der die beiden Dlgs laufen nicht auch den Austausch übernehmen?

    Für dieses Problem gibt es doch bestimmt eine Standardlösung.
    Für ein wenig Codeschnipsel wäre ich sehr dankbar. Denke, ich mache irgendeinen Denkfehlen bei der Deklaration des Zeigers auf das zweite Dlg.

    Würd mich über eine Hilfestellung freuen.

    Gruss
    koreson



  • zeig doch mal die deklaration



  • Hier mein Ansatz(wo bestimmt irgendwas fehlt)
    MovieDlg.h (nicht mod. Dialog auf CChildView), eine Instanz dieser Klasse soll auf eine Variablen einer Instanz von CWin1Dlg zugreifen können:

    #pragma once
    #include "activemoviecontrol1.h"
    #include "afxwin.h"
    #include "Win1Dlg.h"

    class CChildView;

    // CMovieDlg-Dialogfeld

    class CMovieDlg : public CDialog
    {
    DECLARE_DYNAMIC(CMovieDlg)

    public:
    CMovieDlg(CChildView* pView = NULL); // Standardkonstruktor
    virtual ~CMovieDlg();
    CWin1Dlg* mWin1Dlg;

    // Dialogfelddaten
    enum { IDD = IDD_DIALOG3 };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);
    DECLARE_MESSAGE_MAP()

    public:
    CActivemoviecontrol1 mMovie1;

    protected:
    virtual void OnCancel();

    public:
    virtual BOOL OnInitDialog();
    DECLARE_EVENTSINK_MAP()
    void OpenCompleteActivemoviecontrol1();
    afx_msg void OnBnClickedButton1();
    void DblClickActivemoviecontrol1();
    void PositionChangeActivemoviecontrol1(double oldPosition, double newPosition);
    };

    Ich weiss jetzt nat. nicht, ob ich noch die Win1Dlg.h und die Implementierungen posten muss, wenn ja, musste sagen.
    Bei mWin1Dlg->mEdit1.SetWindowText("xxxxxxx"); kommt jedenfalls keine Fehlermeldung beim Übersetzen.

    Gruss
    koreson



  • Hier mein Ansatz(wo bestimmt irgendwas fehlt)
    MovieDlg.h (nicht mod. Dialog auf CChildView), eine Instanz dieser Klasse soll auf eine Variablen einer Instanz von CWin1Dlg zugreifen können:

    #pragma once
    #include "activemoviecontrol1.h"
    #include "afxwin.h"
    #include "Win1Dlg.h"

    class CChildView;

    // CMovieDlg-Dialogfeld

    class CMovieDlg : public CDialog
    {
    DECLARE_DYNAMIC(CMovieDlg)

    public:
    CMovieDlg(CChildView* pView = NULL); // Standardkonstruktor
    virtual ~CMovieDlg();
    CWin1Dlg* mWin1Dlg;

    // Dialogfelddaten
    enum { IDD = IDD_DIALOG3 };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);
    DECLARE_MESSAGE_MAP()

    public:
    CActivemoviecontrol1 mMovie1;

    protected:
    virtual void OnCancel();

    public:
    virtual BOOL OnInitDialog();
    DECLARE_EVENTSINK_MAP()
    void OpenCompleteActivemoviecontrol1();
    afx_msg void OnBnClickedButton1();
    void DblClickActivemoviecontrol1();
    void PositionChangeActivemoviecontrol1(double oldPosition, double newPosition);
    };

    Ich weiss jetzt nat. nicht, ob ich noch die Win1Dlg.h und die Implementierungen posten muss, wenn ja, musste sagen.
    Bei mWin1Dlg->mEdit1.SetWindowText("xxxxxxx"); kommt jedenfalls keine Fehlermeldung beim Übersetzen.

    Gruss
    koreson



  • Prüfe, bevor du zugreifst, den Zeiger, ob er nicht NULL ist.
    (Und den Inhalt deines Posteingangs...)

    Und unter dem Grinsesmilie ist ein Knopf [C/C++], denn du Quellcode markierst und den dann drückst, dann sieht der aus wie im Editor und man kann ihn besser lesen. 🙂


Anmelden zum Antworten