Verwendung einer Klasse auf mehreren Formularen



  • Hi Leute,

    SPAM (muss aber sein): SCHEISSE..., ITALIEN IST WEITER! 😞

    Nun zu meinem Problem. Ich habe ein Programm geschrieben, indem ich mehrere Formulare habe. Dazu kommt eine Klasse, in die einige Daten eingetragen werden. Und da ist auch schon das Problem. Wie kann ich es machen, das die Daten immer in die EINE Klasse geschrieben werden. Irgendwie erstellt der bei mir immer eine neue Instanz der Klasse. Wäre nett, wenn ihr mir helfen könntet. Ich hoffe ihr könnt nachvollziehen was ich aussagen möchte. Ich danke schonmal...

    MfG Apo



  • Hallo

    du must eben sicherstellen das du die eine Instanz zu jedem Form bekannt machst. Dabei könntest du verschiedene Wege gehen
    - Erstelle eine Instanz im Hauptform, und übergib die Instanz als Pointer oder als Referenz an die andern.
    - Lagere die Klasse in eine extra Unit aus, und erstelle dort eine globale Instanz, die du nach außen hin mit extern deklarierst.
    - belies dich nach dem Singleton- Pattern im C++ Subforum

    bis bald
    akari



  • So..., ich habe mich nun mal etwas mit den Singletons auseinandergesetzt, so wie du es mir vorgeschlagen hast. Hier erstmal meine Singleton-Klasse:

    #ifndef TSINGLETON
    #define TSINGLETON
    
    template <class T>
    class TSingleton
    {
        protected:
            // Membervariablen
            static T *m_pSingleton;     // statisches Objekt
    
        public:
            // Destruktor
            virtual ~TSingleton(void)
            {
            }
    
            // Get
            // Wenn nötig, statisches Objekt erzeugen und
            // Zeiger darauf zurückgeben
            inline static T* Get(void)
            {
                // Existiert schon eine Instanz
                if(!m_pSingleton)
                    m_pSingleton = new T;   // Nein, dann neue Instanz erzeugen
    
                // Zeiger auf die Instanz zurückgegeben
                return m_pSingleton;
            }
    
            static void Del(void)
            {
                // gab es eine Instanz?
                if(m_pSingleton)
                {
                    delete m_pSingleton;    // Ja, dann freigeben
                    m_pSingleton = NULL;    // und Zeiger auf NULL setzen
                }
            }
    };
    
    // Die statische Variable erzeugen
    template <class T>
    T* TSingleton<T>::m_pSingleton = NULL;
    
    #endif
    

    Meine CPlayer-Klasse erbt die Attribute der Singleton-Klasse:

    class CPlayer : public TSingleton<CPlayer>
    

    Wenn ich einen Wert in meine Klasse schreiben möchte, dann mache ich das wie folgt:

    CPlayer::Get()->setName(txtName->Text);
    

    Und wenn ich den Wert ausgeben möchte, dann muss ich das so machen:

    lblName->Caption = CPlayer::Get()->getName();
    

    Ich erhalte erstmal keine Fehlermeldungen um die Ohren geschmießen, worüber ich schonmal sehr froh bin aber es gibt noch ein kleines Problem hinter das ich noch nicht gestiegen bin. Wenn ich die Daten auf dem selben Formular ausgebe, auf dem ich diese auch eingegeben habe, funktioniert alles wunderbar. Wenn ich diese aber auf einem anderem Formular ausgeben möchte bekomme ich auch keine Fehlermeldung, aber die Daten werden nicht angezeigt und da liegt mein Problem.

    Könntet ihr mir sagen, wie ich dieses Problem noch umgehen kann? Wäre nett. Danke schonmal...

    MfG Apo


Anmelden zum Antworten