Entwickler-Ecke
Sonstiges (.NET) - Event Zuweisung innerhalb einer Klasse
FrEEzE2046 - Mi 27.05.09 12:03
Titel: Event Zuweisung innerhalb einer Klasse
Hallo,
ich bekomme immer die Fehlermeldung "unerwartetes Token vor ';'" und kann mir nicht richtig erklären, woran das liegen soll.
Das ganze ist innerhalb einer Klasse (Osziloskop). Es soll das per Property referenzierte PictureBox-Steuerelement ein Ereignis innerhalb meiner Klasse zugewiesen bekommen ...
Bitte um Hilfe
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| property System::Windows::Forms::PictureBox^ DrawPlane { void set( System::Windows::Forms::PictureBox^ Plane ) { this->_draw_plane = Plane; this->_draw_plane->Paint += gcnew System::Windows::Forms::PaintEventHandler( this, &Osilloskop::Osilloskop_Paint ); } }
void Osilloskop_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e); |
Der Fehler tritt bei der Event-Routine auf. Lasse ich den Parameter PaintEventArgs weg, dann geht es komischerweise (nur dann eben die Event-Registrierung nicht)
PS: Ist zwar C++/CLI, aber der Fehler hängt ja mit der .NET-Klasse zusammen
Moderiert von
Kha: Topic aus WinForms verschoben am Mi 27.05.2009 um 13:37
Kha - Mi 27.05.09 12:36
:welcome:
FrEEzE2046 hat folgendes geschrieben : |
| Ist zwar C++/CLI, aber der Fehler hängt ja mit der .NET-Klasse zusammen |
Hö :gruebel: ? Das ist doch wohl ein Compilerfehler, da werden dir hier nicht viele helfen können :nixweiss: .
FrEEzE2046 - Mi 27.05.09 12:42
Naja, es ist halt so eine Sache.
Ist es denn überhaupt möglich, was ich hier mache?
Ich habe einen internen Pointer auf eine PictureBox. Wenn diese (per Property) zugewiesen wird, soll die untenstehende Funktion (Oszilloskop_Paint) dem Paint-Event der PictureBox zugewiesen werden. Geht das überhaupt so? Ich bin mir nicht sicher, nicht dass dort der Fehler liegt.
Btw. Ich benutze das Visual Studio 2008 TS-Edition
Kha - Mi 27.05.09 12:49
Ich kann mir zwar kein Szenario vorstellen, in dem eine PictureBox-Property wirklich Sinn macht :zwinker: aber theoretisch - warum nicht?
Naja, versuche ich mal halt mal am C++/CLI-Raten: Warum besitzt denn der Eventhandler keinen Body? Außerdem sieht der mir nach einer Instanzmethode, Osilloskop::Osilloskop_Paint aber nach dem Verweis auf eine statische Methode aus.
FrEEzE2046 - Mi 27.05.09 12:58
Also, dass ganze ist tatsächlich innerhalb einer Klasse (Oszilloskop).
Mein Vorhaben:
Die Klasse Oszilloskop hat Methoden zur Berechnung der Ablenkempfindlichkeit eines Kathodenstrahles (spielt eigentlich keine Rolle^^). So, nun habe ich ein Property, dass einen Verweis auf eine PictureBox enthält, weil auf dieser dann die Parabelbahn der Elektronen gezeichnet wird - soweit klar?
Ich suche nach einer Möglichkeit dies zu realisieren.
Kha - Mi 27.05.09 13:12
Dann würde ich die Klasse von der PictureBox gar nichts wissen lassen, sondern lediglich eine Paint-Methode mit System.Drawing.Graphics-Parameter implementieren :) .
FrEEzE2046 - Mi 27.05.09 13:14
Kha hat folgendes geschrieben : |
| Dann würde ich die Klasse von der PictureBox gar nichts wissen lassen, sondern lediglich eine Paint-Methode mit System.Drawing.Graphics-Parameter implementieren :) . |
Ja, soweit bin ich mittlerweile ja auch, aber grundsätzlich:
Die Ableitung von System::Windows::Forms::Form ist referenziert doch auch ihre events, obwohl die Klasse noch keine Instanz hat ...
Kha - Mi 27.05.09 13:28
Öhm, nö ;) .
C#-Quelltext
1: 2: 3: 4:
| private void InitializeComponent() { [...] this.pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint); |
FrEEzE2046 - Mi 27.05.09 13:34
Doch^^
C#-Quelltext
1: 2: 3: 4: 5:
| void InitializeComponent(void) { [...] this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); } |
Ich sehe da jetzt keinen zu großen Unterschied zu meiner Variante.
Kha - Mi 27.05.09 13:43
Achso, jetzt sehe ich es erst: In /CLI werden Delegate.Target und Delegate.Method anscheinend getrennt übergeben. Dein erster Code war also doch richtig, aber das stimmt trotzdem nicht:
FrEEzE2046 hat folgendes geschrieben : |
| Die Ableitung von System::Windows::Forms::Form ist referenziert doch auch ihre events, obwohl die Klasse noch keine Instanz hat ... |
FrEEzE2046 - Mi 27.05.09 13:52
Kha hat folgendes geschrieben : |
| Achso, jetzt sehe ich es erst: In /CLI werden Delegate.Target und Delegate.Method anscheinend getrennt übergeben. |
Ja, sry. Ich wusste nicht, dass das in C# anders ist. Aber was genau macht die Ableitung von Form denn nun anders, als ich in meiner Klasse. Im Grnud will ich ja das selbige erreichen.
Hast du eine Idee?
Kha - Mi 27.05.09 15:58
Hab doch geschrieben, dass dein Code richtig sein sollte ;) . Sieht ja wirklich genau gleich aus.
Aber ich dachte, dass der Fehler sowieso nicht dort, sondern bei der Definition der Methode auftritt?
FrEEzE2046 - Mi 27.05.09 16:49
Kha hat folgendes geschrieben : |
Hab doch geschrieben, dass dein Code richtig sein sollte ;) . Sieht ja wirklich genau gleich aus.
Aber ich dachte, dass der Fehler sowieso nicht dort, sondern bei der Definition der Methode auftritt? |
Der tritt schon bei der Deklaration der Methode auf. Das da natürlich der Body fehlt ist klar, aber auch wenn der da ist, bleibt der Fehler bestehen ... ich werd daraus nicht schlau
FrEEzE2046 - Mi 27.05.09 17:28
Ich bein Vollidiot. Der Namespace, in den ich die Klasse geschrieben habe, hieß exakt genau so wie die Header-Datei selbst. Das hat den Fehler verursacht ...
Trotzdem danke ich dir für deine Mühen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!