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 user profile iconKha: Topic aus WinForms verschoben am Mi 27.05.2009 um 13:37


Kha - Mi 27.05.09 12:36

:welcome:

user profile iconFrEEzE2046 hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
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:
user profile iconFrEEzE2046 hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
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.