Im Eventhandler auf eigene Objekte zugreifen?
-
Hallo,
ich spiele derzeit ein wenig mit Visual C++ und einer Form Anwendung rum.
Bisher komme ich ganz gut zurecht.Nur jetzt komme ich irgendwie nicht weiter:
Ich habe eine einfache Form Anwendung mit ein paar Buttons. Nun habe ich eine eigene Klasse "Car" erstellt (eigene .h und .cpp).
Nun ist mir nicht ganz klar wo ich das Objekt erzeugen sollte wenn ich aus Eventhandlern (z.B button1_Click) auf die Methoden des Objekts zugreifen möchte.
Im Handler selbst nicht, denn das Objekt soll gültig bleiben solang das Programm läuft.
Car.h habe ich in Form1.h oben included. Wenn ich nun im Konstruktor von Form1
Car* car1 = new Car;
einfüge, und im Eventhandler versuche mit
car1->methode();
darauf zuzugreifen bekomme ich die Meldung:
error C2065: 'car1': nichtdeklarierter Bezeichner
Wie geht man denn da generell vor? damit ich von allen Eventhandlern auf meine eigenen Klassen zugreifen kann?
edit: Aso wenn ich das Objekt direkt im Eventhandler erzeuge kann ich wunderbar auf alle Methoden zugreifen. Aber das wollte ich ja nicht....
Danke im Voraus!
-
Du mußt dann diese Variable als Klassenmember anlegen (also außerhalb des Konstruktors aber innerhalb der Klasse -)
-
lässt sich jetzt problemlos kompilieren und ich kann im Eventhandler meine Methode aufrufen.
Sieht jetzt so aus:
Variable als Klassenmember von Form1 hinzugefügt:
public: Car^ car1;
hoffe das meintest du!?
und im Konstruktor von Form1
Car^ car1 = gcnew Car;
und die Klassendeklaration in:
public ref class Car { ... }
Bekomme aber beim Methodenaufruf im Eventhandler ne System.NullReferenceException.
Wenn ich das ganze debugge und mein Objekt überwache wird es im Konstruktor richtig erzeugt aber sobald der Eventhandler aufgerufen wird hat das Objekt nur noch: <nicht definierter Wert>.was mach ich falsch?
Danke im Voraus!
-
Du hast im Konstruktur eine lokale Variable car1, die Member Variable wird nicht angetastet. Die lokale Variable verdeckt die Member Variable.
So gehts:
// Im Konstruktor von Form1 car1 = gcnew Car;
Simon
-
Jau danke jetzt funktioniert es wie es soll.
hätte mir auch auffallen können das ich im Konstruktor ne 2. Variable erzeuge.
Danke für die schnelle Hilfe!