Auf variable anderer klasse zugreifen!



  • Ich habe eine SDI anwendung und öffne ein Dialogfeld!

    In diesem Dialofeld mache ich verschiedene eintragungen die ich in eine Variable meines SDI-Views speichern will! Wie stelle ich das an?

    [ Dieser Beitrag wurde am 03.09.2002 um 17:16 Uhr von chris_g editiert. ]



  • In der SDI-View-Klasse eine public-Methode "SetValues()" erstellen, die die Werte setzt. Ganz einfach!



  • ja aber ich brauche ja den inhalt der variablem vom dialogfeld weißt du?



  • Original erstellt von chris_g:
    ja aber ich brauche ja den inhalt der variablem vom dialogfeld weißt du?

    Du erstellst doch sicherlich eine Variable für die Klasse!
    also CMeinDialog Dialog; und rufst den Dialog dann mit Dialog.DoModal() auf!
    Und mit Dialog.beliebigeVariable greifst du ganz normal auf die Variable zu, wo liegt da das Problem?😕



  • meine klasse heißt HelpDlg.

    HelpDlg m_helpDlg;
    m_helpDlg.DoModal();
    

    ja genau so ruf ich den dialog auf ABER:

    Ich will von diesem Dialog aus den Inhalt der variablen von meiner anderen Klasse ändern weißt du?

    [ Dieser Beitrag wurde am 03.09.2002 um 19:43 Uhr von chris_g editiert. ]



  • Deine Lösung steht hier
    Variablen Klassenübergreifend
    Suchen hätte auch was gebracht

    Klassen und Variablen

    vossy



  • Die Lösung aus der FAQ ist aber keine gute Lösung, da dort mit public-Variablen gearbeitet wird. Mich wundert, dass sowas in einer FAQ steht. Man macht das über eine Set-Methode, wie ich sie oben beschrieben habe.



  • Man macht dies noch "einfacher".

    Man übergibt der aufgerufenen Klasse den Zeiger der aufrufenden Klasse und kann dann in dieser auf die aufrufende Klasse und deren Member zugreifen.

    Ist aber kein MFC-Problem sondern eine Wissenlücke in C++.



  • Original erstellt von Unix-Tom:
    **Man macht dies noch "einfacher".

    Man übergibt der aufgerufenen Klasse den Zeiger der aufrufenden Klasse und kann dann in dieser auf die aufrufende Klasse und deren Member zugreifen.

    Ist aber kein MFC-Problem sondern eine Wissenlücke in C++.**

    Tja, und wie greift man auf die Members der aufrufenden Klass zu? Per GetMethode natürlich, denn wir wollen KEINE public-Variablen. Im Übrigen ist diese Methode keineswegs einfacher, sondern IMHO sogar schwerer und unübersichtlicher. Was ist daran so schwer, zu schreiben

    HelpDlg  m_helpDlg;
    m_helpDlg.SetValues(m_Member1, m_Member2);
    // oder
    m_helpDlg.SetValues(&m_Member1, &m_Member2);
    m_helpDlg.DoModal();
    

    Per Referenz ginge es auch. Und das ist IMHO auch besseres OOP.



  • so ist es natürlich am besten!!! Danke euch für die Hilfe! 🙂



  • Ich sehe auch gerade, dass mein erster Beitrag falsch war. Ich meinte natürlich "In der Dialog-Klasse" anstatt von "In der SDI-View-Klasse".



  • Warum sollte man etwas in Variablen speichern wenn man direkt in die View schreiben kann !

    Dies geht nur wenn man den thiszeiger übergibt.
    In der View muß man erst wieder die Var auslesen und dann dort ausgeben wo man möchte.
    Da kann man gleich vom Dialog die ausgabe machen.



  • Ich habe einen Kompromiss-Vorschlag für dich, der IMHO auch OOP-technisch der beste ist. Man macht sich eine Klasse CVisualizer und schreibt dann in der View (wenn der Dialog angezeigt werden soll):

    Visualizer->ShowDialog(this);
    

    wobei man die Methode "CVisualizer::ShowDialog(CWnd* Caller)" aufruft. Ich weiß natürlich nicht, von welcher Klasse die Vieew-Klasse abgeleitet ist, deshalb schreibe ich hier mal CWnd. Keine Ahnung, ob das richtig ist. Was hältst du davon?



  • ich brauche aber die variable im View!!!



  • OK, ich schmeiße alles wieder über Bord. Also, im Dialog werden Werte eingestellt (vom User), die in der View gespeichert werden sollen. So solls doch sein, oder? D.h., mein erster Beitrag war doch richtig. Sagen wir, die Variable im View heißt m_Variable und ist vom Typ int. OK, dann schreibst du dir eine Methode SetVariable() in der View-Klasse:

    private:
        m_Variable;
    
    public:
        void CView::SetVariable(int var)
        {
           m_Variable = var;
        }
    

    Eine solche Methode nennt man auch Set-Methode. Im Dialog kannst du dann einfach schreiben

    View->SetVariable(5);
    

    Prinzip kapiert?


Log in to reply