CTabCtrl - Datenaustausch zwischen 2 Child Dialogen

freak-like-me

Grünschnabel
Hallo zusammen,

ich hocke jetzt schon etwas länger an einem Problem und meine Suche im Internet bringt mich leider nicht weiter. Ich hoffe, ihr könnt mir weiterhelfen.

Folgendes: Ich habe einen Dialog bei dem ich ein TabControl eingefügt habe. Dieses TabControl enthält mehrere Pages - Child Dialoge. Auf diesen Child Dialogen/Pages habe ich zb Edit Controls oder irgendwelche Buttons eingefügt. Für die einzelnen Edit Controls habe ich mir Variablen erstellt, in dem der Wert des Feldes abgespeichert ist. Nun möchte ich auf die Variable eines Child Dialoges von einem anderen Child Dialog zugreifen um hier weitere Bearbeitungen damit auszuführen.

Wie stellt man dies am besten an? Wenn ihr noch mehr Informationen braucht einfach melden. Ich weiß jetzt noch nich so recht, was ich dazu alles schreiben sollte, damit mein Problem verständlich ist. :)

Danke schonmal für die Hilfe!
 
Das sind eigentlich Grundlagen der Programmierung, ich weiß nicht, warum viele damit Probleme haben? Du willst auf etwas Zugriff haben, dann reiche das, worauf du Zugriff haben willst, weiter.

Es gibt da keinen Auto-Mechanismus bei TabControls. Ich setze meistens in die Parent-Dialog-Klasse Pointer zu den Page-Klassen. Und in den Page-Klassen jeweils ein Pointer auf die Parent-Klasse. Das ist weder elegant noch toll objektorientiert, aber wen interessiert das.
 
Ich weiß, dass es bestimmt ganz einfach ist, aber irgendwie sehe ich vor lauter Programmcode die Lösung nicht, sorry.

Vielleicht mal einen kleinen Einblick in meinen Aufbau:
(Für die Implementierung habe ich mich an diesen Beispiel-Code gehalten http://www.codersource.net/mfc/mfc-tutorials/ctabctrl.aspx)

- Ich habe einen Hauptdialog, deren Klasse zb Main.cpp heißt
- Auf dem Hauptdialog liegt das TabControl, deren Klasse zb TabCrtl.cpp heißt und von CTabCtrl abgeleitet ist
- Ich habe mehrere Pages, deren Klassen zb Page1.cpp, Page2.cpp usw heißen

-> Main.h hat eine Verbindung zu der TabCtrl.cpp Klasse über TabCtrl m_tbCtrl
-> innerhalb der OnInitDialog() - Methode in der Main.cpp Klasse werden dann die einzelnen pages des TabControls initialisiert (InsertItem und so...).
-> in der TabCtrl.cpp werden die einzelnen pages über die Create()-Methode erstellt.

Mein Problem ist jetzt, dass ich zb auf Page1 eine Checkbox habe deren Wert in einer bool-Variable in Page1.cpp gespeichert ist und diesen Wert möchte ich nun von Page2 aus abfragen. Ich weiß es ist wahrscheinlich total einfach. Normalerweise habe ich auch mit OO-Programmierung keine Probleme, aber irgendwie seh ich grad keine Lösung....HILFEEE!! :). Vielleicht bringt mich auch dieses Dialogdenken durcheinander.....
 
In allen Page-Klassen nimmst du einen Pointer zu einem TabCtrl*. Dieses Member setzt du an der Stelle, wo du die Child-Dialog-Klassen erzeugst.
In deiner TabCtrl merkst du dir Pointer zu den jeweiligen Child-Dialogen. Und schon kannst du von allen Seiten nach allen Seiten zugreifen:

Mit Pseudo-Namen:

In TabCtrl.h:

// forward-Deklaration (um keine Header includen zu müssen)
class Page1;
class Page2;
...

Page1* m_pPage1;
Page2* m_pPage2;
...

In Page1.h (Page2.h etc.):

// forward-Deklaration (um keine Header includen zu müssen)
class TabCtrl;
...

TabCtrl* m_pParent;






In Page2:
m_pParent->m_pPage1->m_CheckBox.GetCheck()


Ganz OOP-Vernarrte können bestimmt auch drei bis zwölfzig Designpatterns da reinpropfen und das dann "eleganter" lösen, aber warum kompliziert, wenn es auch einfach geht.
 
Zurück