Problem: Instanz ansprechen



  • Das hilft leider auch nicht.



  • Die Diagnose für dein Problem ist recht einfach, und die Tatsache, dass du es wirklich nicht sehen kannst, bestätigt deine eigene Aussage. Ich finde es jedoch toll, wie du hartnäckig dran bleibst, denn wenn du es einmal auf diese Art und Weise gelernt hast, vergisst du es bestimmt nicht mehr. Die Funktion, in welcher der Fehler auftritt, ist nicht das Problem. Es ist der Kontext, in welchem sie aufgerufen wird:

    /* IP SENDER starten */
    void eigeneFunktionen::start ()
    {
                     Form1^ form;
                     // diagnosed. Hier ist der Fehler.
                     form->textbox1ändern ("textbox1ändern");
                     this->lokaleIPfinden ();
                                     ...
                                     ...
    

    Was ist hier das Problem? Du siehst es vermutlich nicht, was auch nicht weiter erstaunt, ist doch nichts da - doch genau das ist auch das Problem. Es fehlt etwas, nämlich die Initialisierung von Form1^ form . Du deklarierst eine Referenz auf eine Form1 -Instanz, initialisierst sie aber nicht. Dein Aufruf textbox1ändern geht ins Nichts, darum die NullReferenceException . Die Lösung sieht so aus:

    /* IP SENDER starten */
    void eigeneFunktionen::start ()
    {
                     Form1^ form;
                     // fixed.
                     form = gcnew Form1;
                     form->textbox1ändern ("textbox1ändern");
                     this->lokaleIPfinden ();
                                     ...
                                     ...
    

    Ausgehend von deinen bisherigen Problemen und dem mir hier vorliegenden Code wage ich die Prognose, dass diese Form nicht angezeigt werden wird. Falls dies der Fall sein sollte, musst du sie noch über form->Show(); dazu anweisen.



  • mmh ... das kommt mir bekannt vor. Nur wollte ich die Instanz ansprechen welche - wie ich bereits gelernt habe - im Hauptprogramm erzeugt wird. Also KEINE neue Instanz von Form1 erstellen.





  • Was möchtest du mir damit sagen?



  • Hier mal ein wenig Code:

    eigeneFunktionen.h

    #pragma once
    
    namespace IPSender 
    {
    	ref class Form1;
    
    	public ref class eigeneFunktionen 
    	{ 
    	public:
    		void start (Form1^ form); 
    	};    
    }
    

    eigeneFunktionen.cpp

    #include "stdafx.h" 
    #include "eigeneFunktionen.h"
    #include "Form1.h"
    
    using namespace IPSender; 
    
    void eigeneFunktionen::start (Form1^ form) 
    { 
    	form->textbox1ändern ("textbox1ändern"); 
    }
    

    Ausschnitt aus Form1.h:

    #pragma once
    #include "eigeneFunktionen.h"
    
    namespace IPSender
    {
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    		// ...
    
    	public:
    		void Form1::textbox1ändern (String ^text) 
    		{ 
    			textBox1->AppendText (text); 
    		} 
    
    		void Form1::textbox2ändern (String ^text) 
    		{ 
    			textBox2->AppendText (text); 
    		} 
    
    	private:
    		System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    		{
    			eigeneFunktionen^ funkinstanz = gcnew eigeneFunktionen(); 
    			funkinstanz->start(this);
    		}
    	};
    }
    

    Ev. hilft Dir das.
    Simon



  • Aha ... das klappt. Nun aber zum verstehen.

    In der Form1, was passiert da? Eine Referenz auf die Klasse Form1? Somit ist Form1 dann nicht mehr unbekannt. Das war genau das was ich einfach nicht verstanden habe an deinen vorigen Beispielen.

    Danke dir, und natürlich euch auch. 🙂



  • In der Form1, was passiert da? Eine Referenz auf die Klasse Form1? Somit ist Form1 dann nicht mehr unbekannt. Das war genau das was ich einfach nicht verstanden habe an deinen vorigen Beispielen.

    Sorry, ich verstehe deine Frage nicht.

    Poste doch den Codeausschnitt den Du nicht verstehst. Ev. schreibe fragen direkt in den Quelltext.

    Simon



  • #pragma once
    
    namespace IPSender
    {
        ref class Form1; <--------- hier???
    
        public ref class eigeneFunktionen
        {
        public:
            void start (Form1^ form);
        };    
    }
    



Anmelden zum Antworten