MFC: PropertySheet Datenaustausch zwischen zwei tabs

Dieses Thema MFC: PropertySheet Datenaustausch zwischen zwei tabs im Forum "Windows XP Forum" wurde erstellt von PeterOG, 30. Apr. 2006.

Thema: MFC: PropertySheet Datenaustausch zwischen zwei tabs Hi, also ich hab eine propertypage(x) mit einem button, wenn man klickt öffnet sich ein neues propsheet mit 2...

  1. 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. 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.
     
Die Seite wird geladen...

MFC: PropertySheet Datenaustausch zwischen zwei tabs - Ähnliche Themen

Forum Datum
Office 2010: Datenaustausch (Serienbrief) funktioniert nicht mehr... Windows XP Forum 9. Aug. 2013
Hilfe beim Datenaustausch zwischen Netbook( Win 7 ), Notebook( Vista) und PC ( win 7) Windows 7 Forum 4. Jan. 2010
WIN 7 und WIN XP Datenaustausch Netzwerk 24. Feb. 2010
Online Datenaustausch Windows XP Forum 12. Okt. 2009
VPN=Datenaustausch und anpingen JA; Spielen NEIN Windows XP Forum 29. Mai 2007