Datenaustausch zwischen Dialogen

Bjoern78

Grünschnabel
Hallo,

ich suche seit einiger Zeit nach einer Möglichkeit Daten zwischen Dialogen auszutauschen. D.h. in Dialog1 (CDialog) wird z.B. ein Button betätigt und Dialog2 (CDialog) soll der Wert in einem Edit Feld eingetragen werden.

Für jede kleine Anleitung bin ich natürlich dankbar. :confused:
 
Wird Dialog1 von Dialog2 aufgerufen? Wenn ja, dann sowas hier:

im Header von Dialog1:
public:
Variable var1; // natürlich dein gewünschter Typ, also CString, int, ... und Name

im Header von Dialog2:
public:
Variable var2; // natürlich dein gewünschter Typ, also CString, int, ... und Name

der Aufruf:
if( Dialog1.DoModal == IDOK )
var2 = Dialog1.var1;


Nur so runtergetippt, also keine Gewähr.

Wenn die Dialoge unabhängig voneinender aus einem Fenster aufgerufen werden, dann var1 in der Fensterklasse 'zwischenspeichern' und bei Bedarf an Dialog2 übergeben.


grüssle :)
 
Zuletzt bearbeitet:
Das trifft es noch nicht ganz...Dialog2 liegt auf einem Tab, abgeleitet von CTabCtrl. In Dialog1 wird dieses Tab aufgerufen.
CDialog2 ist keine PropertyPage,d.h. nur von CDialog abgeitet und per

CConfigTabCTRL::CConfigTabCTRL(){

m_DialogID[0] =IDD_CONFIG_ENGINE;
m_Dialog[0] = new CEngineConfig();
...
}

void CConfigTabCTRL::InitDialogs(){

m_Dialog[0]->Create(m_DialogID[0],GetParent());
...
}​

erstellt.
 
und dieses TabCtrl liegt auf einem Dialog?

Kannst du von dem Dialog auf die anderen Dialoge( z. B. Dialog2 ) zugreifen?

Wenn ja, dann mach ne Dialog globale Variable und reiche diese durch.

Aber was genau funktioniert nicht? public Variablen können direkt nach Erstellung des Dialoges angesprochen werden. D. h. sie können gesetzt und / oder gelesen werden. Code dazu weiter oben.

Das trifft es noch nicht ganz...Dialog2 liegt auf einem Tab, abgeleitet von CTabCtrl. In Dialog1 wird dieses Tab aufgerufen.
CDialog2 ist keine PropertyPage,d.h. nur von CDialog abgeitet und per

Zitat:

...
m_Dialog[0]->Create(m_DialogID[0],GetParent());
m_Dialog[0]->m_meineVariable = "neuer Wert"; //m_meineVariable, CString, im Header unetr public: definiert.
...
}

erstellt.


grüssle :)
 
Zuletzt bearbeitet:
Ok. Jetzt hab ichs endlich. Das ist so eine Mischung zwischen deinem letzten Vorschlag und einem meiner Zahlreichen Versuche...

Das vorangegangene stand ja in der MyCTabCtrl Klasse von CTabCtrl abgeleitet. In CDdialog1 muss ich nun nur noch

m_tbCtrl.m_Dialog[0]->SetDlgItemText( IDC_Irgendwas, "200" );

aufrufen.
Dabei ist m_tbCtrl die zugehörige Membervariable zu MyTabCtrl.

Dank dir
 
Und genau das vorherige macht jetzt Probleme. Ich hab einige Radio Elemente mit eingebaut. Wenn ich die nach dem vorherigen Aufruf nutzen muss, dann stürzt alles ab...keine Ahnung warum.
 
Und genau das vorherige macht jetzt Probleme. Ich hab einige Radio Elemente mit eingebaut. Wenn ich die nach dem vorherigen Aufruf nutzen muss, dann stürzt alles ab...keine Ahnung warum.

Mit
Code:
m_tbCtrl.m_Dialog[0]->SetDlgItemText( IDC_Irgendwas, "200" );
wird der Text des Steuerelemts 'IDC_Irgendwas' von aussen gesetzt.
Das ist gefährlich, da das Steuerelement zu diesem Zeitpunkt vllt. noch nicht erstellt ist.

Besser wäre ein Setzen der Werte im OnInitDialog des Dialoges selbst.

Also sowas hier:
Code:
m_tbCtrl.m_Dialog[0]->m_Variable = "200";
...
// Im Dialog dann
BOOL CDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();

	SetDlgItemText( IDC_Irgendwas, m_Variable);
...

Und genau das vorherige macht jetzt Probleme. Ich hab einige Radio Elemente mit eingebaut. Wenn ich die nach dem vorherigen Aufruf nutzen muss, dann stürzt alles ab...keine Ahnung warum.
?
Ein
Code:
SetDlgItemText( IDC_Irgendwas, m_Variable);
Aufruf für einen Radiobutton geht schief. Hier wäre es z. B.
Code:
m_RadioButton.SetCheck( 1 );


grüssle :)
 
Zuletzt bearbeitet:
Ich hab jetzt so einigermaßen meine Lösung hinbekommen. Im dem Dialog, auf welchem der Tab liegt, verwende ich folgende Zeile

m_tbCtrl.m_Dialog[0]->CWnd::CheckRadioButton(id first,id last,id aktuell);

War nur ein kleiner Fehler innerhalb des SubDialogs. Dort hatte ich versehentlich eine zweite Membervariable ins spiel gebracht.
 
Zurück