Zugriff auf Form1 + Objekte von From2 aus mittels Zeiger



  • Hallo Community!

    Vorab: ich nutze VS 2005.

    Ich weiß das das hier schon mehrmals durchgekaut wurde und sogar in der FAQ was drueber steht wie man auf versch. Forms zugreift.

    Ich wuerde jedoch der Einfachheit halber (weil ich doch evtl. mehrere Sachen manipulieren will) gerne einen this-Zeiger von Form1 an Form2 uebergeben und dann in Form2 jedes mal nur z. b.

    FormPointer->picBox1->text = "blabla";

    eingeben muessen. Ich habe das auch schon - mit viel Hilfe - in Code realisiert, nur fange ich den Form1-Zeiger nicht mit einem Typ "Form1" sondern nur "Form" auf und kann deshalb nicht auf die Objekte welche Form1 hat zugreifen, sondern nur die Eigenschaften der Form selber veraendern.
    Mein Projekt heißt Pong - Wenn ich jetzt Pong:: eingebe erscheint auch eine Liste in der Form1 angeboten wird, jedoch meldet der Compiler dann Fehler.

    In der Klassendefinition meiner 2. Form (Form_Optionen.h) ist das drin:

    //private: Pong::Form1 ^FormPointer; <-- fuehrt zu Compilerfehler
    	private: System::Windows::Forms::Form ^FormPointer;
    
    	public:
    		//void myfunc(Pong::Form1 ^parent) <-- fuehrt zu Compilerfehler
    		void myfunc(System::Windows::Forms::Form ^parent)
    		{
    			FormPointer = parent;
    		}
    

    Der Aufruf von meiner Form1.h gestaltet sich so (Form_Optionen.h ist nach #pragma once included):

    Form_Optionen ^frm_optionen = gcnew Form_Optionen();
    			 frm_optionen->myfunc(this);
    			 frm_optionen->StartPosition = FormStartPosition::CenterParent;
    			 frm_optionen->ShowDialog();
    

    Ich waer froh wenn mir jemand sagen koennte was ich eingeben muss damit ich das auch wirklich als "Form1" auffange und dann hoffentlich schoen rumfuhrwerken kann - oder wenns nicht geht, warum :).

    Vielen Dank schonmal



  • Du musst in Form2 Form1.h includieren und den Zeiger als Form1 anlegen.



  • Hi und danke fuer den Tipp - aber das habe ich auch schon versucht.

    Wenn ich also in Form1 die Form_Optionen natuerlich - unter #pragma once - und in Form_Optionen die Form1 - ebenso unter #pragma once - include und dann in Form_Optionen

    private: Form1 ^FormPointer;
    

    und

    public:
            void myfunc(Form1 ^parent)
            {
                FormPointer = parent;
            }
    

    schreib, krieg ich ne Latte an 13 Fehlern. Ich kopier jetzt einfach mal die ersten 3 in der Hoffnung das man daraus bereits schlau werden kann:

    c:\dokumente und einstellungen\heinrich\eigene dateien\visual studio 2005\projects\pong\pong\Form1.h(821) : error C2065: 'Form_Optionen': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\heinrich\eigene dateien\visual studio 2005\projects\pong\pong\Form1.h(821) : error C2065: 'frm_optionen': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\heinrich\eigene dateien\visual studio 2005\projects\pong\pong\Form1.h(821) : error C2061: Syntaxfehler: Bezeichner 'Form_Optionen'

    ... das schaut fuer mich so aus als ob er mit dem gegenseitigen includen durcheinander kommen wuerde - aber eben das sollte ja nicht passieren wenn ich jeweils erst nach #pragma once include oder?

    Danke schonmal



  • Hm, ich lass mich doch so schnell verwirren.

    <Form1.h>:

    #include "Form2.h";
    

    <Form2.h>:

    #include "Form1.h";
    

    Hast Du sowas ?

    Wenn ja, gedanken über das Design machen. Wenn es sich dann nicht anderst regeln lässt, musst Du den Code zwischen definition und deklaration trennen, ebenso mit forwärtsdeklarationen arbeiten und den Header in der .cpp includieren.


Anmelden zum Antworten