Von Form2 auf Form1 zugreifen: Nix passiert.
-
Hi!
Cooles Forum erstmal, ich hab von hier schon einiges an Info rausgeholt.
Nun habe ich aber leider ein Problem wo ich nicht mehr weiter komme:Ich schaff es nicht von meinem Formular "Search" aus auf ein Label (public) in Form1 zuzugreifen.
Es Kompiliert fehlerlos,
erzeugt keine Runtime-Errors,
bewirkt aber nichts.
Das label1 bleibt unverändert.#include <vcl.h> #pragma hdrstop #include "stdafx.h" using namespace ListViewDieZweite; void Search::button1_Click(System::Object * sender, System::EventArgs * e) { Form1 * MyForm1 = new Form1(); MyForm1->label1->Text = "Gruß aus Form2"; }
meine stdafx.h:
// stdafx.h: Includedatei für Standardsystem-Includedateien // oder häufig verwendete, projektspezifische Includedateien, // die nur selten geändert werden. #pragma once #define WIN32_LEAN_AND_MEAN // Selten verwendete Teile der Windows-Header nicht einbinden // C RunTime-Headerdateien #include "Form1.h" #include "ComPort.h" #include "Settings.h" #include "ini_Commands.h" #include "listviewcolumnsorter.h" #include "Search.h" #include <stdlib.h> #include <tchar.h> #include <iostream> #include <string.h> #include <vcclr.h> #include <string.h> // TODO: Verweisen Sie hier auf zusätzliche Header, die Ihr Programm erfordert
Form1.h:
//... public: System::Windows::Forms::Label * label1; //...
Hat jemand eine Idee warum meine Grüße ins Daten-Nirvana geschickt werden?
Vielen Dank fürs Durchlesen
Gruß
pAT
-
Ja weil Du die falsche Instanz von Form1 verwendest.
Du legst eine neue Instanz an und änderst dort den Wert. Füge mal Deiner Zeile noch ein Form1->Show(); hinzu und Dir geht ein Licht auf.
Tip: Grundlagen lesen: Klassen, Instanzen und Objekte.
Abgesehen davon, das Dein Quellcode sich so nicht Übersetzen lässt.
-
Ah, danke!
Ich hab schon versucht Zeiger zu übergeben. Klappt auch ganz gut.
Aber ich hab keinen Schimmer wie ich "Search" klarmachen soll, dass es docht ein label1 gibt..."Search" Wird aufgerufen:
Search * Form = new Search(this); Form->Show();
Search.h:
public __gc class Search : public System::Windows::Forms::Form { public: //Search(void) Search(Form *f) { InitializeComponent(); this->MyForm1 = f; } //... public: const static Form * MyForm1; // ... //...
Form1 * Momo = MyForm1; //<- Fehler Momo->label1->Text = "lala";
d:\...\ListViewDieZweite\Search.cpp(12): error C2440: 'Initialisierung': 'const System::Windows::Forms::Form __gc *' kann nicht in 'ListViewDieZweite::Form1 __gc *' konvertiert werden
-
Ich würde mal tippen, das Search nichts von Form1 weiss.
Hast Du denn den Header includiert ? (Du arbeitest mit VS 2003 ?)
-
ja, Microsoft Visual Studio .NET 2003
alle Header stehn in stdafx.h (siehe Post1), jede .cpp ruft sie auf...
-
Sorry, mein Fehler.
Du musst System::Windows::Forms nach Form1 casten. Du kommst automatisch von der abgeleiteten Klasse zur Basisklasse aber nicht umgekehrt.
-
JAA! Es funktioniert!
Vielen herzlichen Dank!!
Für alle Mit-Noobs:
void Search::button1_Click(System::Object * sender, System::EventArgs * e) { Form1 * MyForm1 = static_cast<Form1*>(FormPointer); MyForm1->label1->Text = "Grüße aus Search"; }
Header:
public: System::Windows::Forms::Form * FormPointer;