MFC: Datenaustausch zwischen zwei Dialogfenstern

  • #1
K

keksko

Guest
Ich hab eine dialogbasierende anwendung erstellt und hab in den Header- und Source-Dateien des Dialogs CDialog durch CPropertySheet ersetzt.
Und hab Klassen, von CPropertyPage abgeleitet, ersteltt für jedes Dialogfeld und
dort Membervariablen zugewiesen z.B. CWelcome,CPruef oder CNoten. Das PropertySheet wird im Wizard-Modus verwendet. So wie das Dings <-hier beschrieben hat

dlg.h
Code:
class CAbirechnerDlg : public CPropertySheet								//CDialog ersetzt duech CPropertySheet
{
// Konstruktion
public:
	CAbirechnerDlg(CWnd* pParent = NULL);	// Standard-Konstruktor
	//Konstruktion von Objekten der PropertyPages//
	CWelcome page1;
	CPruef page2;
	CNoten page3;
dlg.cpp
Code:
CAbirechnerDlg::CAbirechnerDlg(CWnd* pParent /*=NULL*/)
	: CPropertySheet()	//Parameter der Elternklassen-Initialisierung geändert(CDialog->CPropertySheet())
{
	//{{AFX_DATA_INIT(CAbirechnerDlg)
		// HINWEIS: Der Klassenassistent fügt hier Member-Initialisierung ein
	//}}AFX_DATA_INIT
	// Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  AddPage(&page1);
	AddPage(&page2);
	AddPage(&page3);
	AddPage(&page4);
	AddPage(&page5);
	AddPage(&page6);
	SetWizardMode();
}

Das Sind halt 6Seiten die man mit weiter durchschalten kann.
wenn ich auf der 1. Seite(CWelcome) etwas eintrage, soll das auf der 2. Seite angezeigt werden(CPruef).

Wie kann ich jetzt Daten von der 1.Seite auf der 2.Seite einfügen?
 
  • #2
Siehe hier:



Da Du die PropertyPages nicht dynamisch erzeugst, müsstest Du den Weg einer Extra-Methode in der Klasse der ersten Seite wählen. Dieser übergibst Du dann einen Zeiger auf die 2. PropertyPage. Weiter wie im anderen Beispiel.
Oder Du erzeugst die Seiten eben dynamisch mit new und erweiterst den Konstruktor Deiner Seiten (bzw. schreibst einen zusätzlichen).

Falls Du mehreren Seiten (oder gar allen anderen Seiten) von einer Seite aus etwas übergeben willst, kannst Du besser eine Methode in Deiner PropertySheet-Klasse implementieren, die von der entsprechenden Seite aufgerufen wird und dann mehrere (oder alle) anderen PropertyPages aufruft. Also eine Art Nachrichtenverteiler. Du kannst in der PropertyPage das Elternfenster abfragen, auf CAbirechnerDlg casten und dann diese Verteiler-Methode aufrufen. Alles nach dem gleiche Prinzip wie vorher bei PropertyPage -> PropertyPage, nur dass Du Dir das Bekanntmachen der Adresse des Zielobjektes sparen kannst, da sie der Adresse des Elternfensters (PropertySheet) entspricht.
Die PropertySheet-Klasse selbst kennt ja alle Seiten, da kannst Du Methoden der PropertyPages direkt aufrufen.

Man könnte bei PropertyPage -> PropertyPage bzw. PropertyPage -> PropertySheet -> PropertyPage(s) auch direkt auf die Member-Variablen zugreifen anstatt Methoden zu schreiben, aber das wäre eine sehr unsaubere Lösung.
 
Thema:

MFC: Datenaustausch zwischen zwei Dialogfenstern

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben