MFC: PropertySheet Datenaustausch zwischen zwei tabs

  • #1
P

PeterOG

Guest
Hi,
also ich hab eine propertypage(x) mit einem button, wenn man klickt öffnet sich ein neues propsheet mit 2 proppages.
Die Daten von den den 2 proppages zu übernehmen is kein problem
das mach ich halt in der funktion vom button(auf der propage(x)),
mit if(propertySheet_1.DoModal() == IDOK).

Aber wie kann ich jetz zwischen den zwei propertypages daten übergeben, während das propertysheet mit den zwei pages(2tabs) geöffnet ist? Das Objekt der Klasse wird ja in der klasse der (x) page erzeugt und in den anderen klassen kann ich ja nicht drauf zugreifen.

Wenn ich das neuerzeugte propertysheet schließe wird ja die (propertySheet_1.DoModal() == IDOK) aufgerufen. Also wenn ich es schließe und neu öffne kann ich die daten übergeben aber halt nicht zwischendrin.

kann ich da nicht if(propertySheet_1.m_Tab1.OnSelchangeCombo1()==true) machen oder so, halt ne abfrage ob etwas geändert wurde?
Oder gibt es eine möglichkeit von einer anderen klasse auf das objekt zuzugreifen und die daten zu übergeben?

MFG Peter
 
  • #2
Oder gibt es eine möglichkeit von einer anderen klasse auf das objekt zuzugreifen und die daten zu übergeben?

Du kannst z.B. einfach einen Zeiger auf Objekt 1 (Ziel) an Objekt 2 (Quelle) übergeben. Entweder gleich im Konstruktor oder in einer anderen Methode. Oder Du fragst die PropertySheet-Instanz (ist ja Parent) danach. Es gäbe u.a. auch noch die Möglichkeit, eine Klasse zu schreiben, die nur für die Kommunikation zuständig ist; eine Instanz davon wird dann den Objekten übergeben. Aber so etwas wäre hier Overkill.
Jedenfalls: Wenn Objekt 2 dieser Zeiger zur Verfügung steht, kann es ja öffentliche Methoden von Objekt 1 aufrufen, welche die entsprechenden Daten entgegennehmen. Natürlich muss dazu Klasse 2 die andere Klasse kennen; also bindest Du in die Source-Datei von Klasse 2 den Header von Klasse 1 ein. In die Header-Datei von Klasse 2 schreibst Du eine Vorwärtsdeklaration, also etwas wie

class Klasse1;

und in die Klassendefinition von Klasse 2 eine Variable wie

private:
  Klasse1* m_pObjekt1;

m_pObjekt1 initialisieren/setzen (s.o).

Bei Bedarf dann

m_pObjekt1->DeineMethode(...Parameter...);

Setze aber m_pObjekt1 auf NULL, wenn Du den Zeiger nicht im Konstruktor entgegennimmst. Rechne damit (egal, welche Methode zum Setzen Du verwendest), dass der Zeiger NULL ist. Also:

ASSERT(m_pObjekt1 != NULL);
if(m_pObjekt1 != NULL)
  m_pObjekt1->DeineMethode(...Parameter...);

---

In Klasse1.cpp

void Klasse1::DeineMethode(...Parameter...) {
  // ...
  // Membervariablen setzen
}

In der Header-Datei
public:
  void DeineMethode(...Parameter...);

Im speziellen Fall von PropertyPages reicht es, wenn Du in->DeineMethode' den Wertevariablen der Controls die neuen Werte zuweist. Beim Aktivieren der Ziel-PropertyPage wird automatisch upgedated. Falls etwas Komplexeres nötig ist, würde ich auf die Aktivierung der PropertyPage reagieren und entsprechenden Code dort einfügen.

// Nachtrag
Wenn Du die Seiten dynamisch erzeugst und der Sender-Seite die Adresse der Empfänger-Seite im Konstruktor (oder auch anders) übergibst, musst Du natürlich erst die Empfänger-Seite erzeugen (new ...), dann die Sender-Seite mit der Adresse der Empfänger-Seite als Parameter.
 
Thema:

MFC: PropertySheet Datenaustausch zwischen zwei tabs

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.839
Beiträge
707.962
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben