Parameterübergabe bei Events

FWerewolf

Grünschnabel
Hi,

Ich hab folgendes Problem :
Ich hab ein Form, auf dem dynamisch beim Start icons erzeugt werden. Diese Icons sollen nun auf Doppelklick Details des Rechners anzeigen, den sie repräsentieren.

Das Doubleclick Event ist zugefügt und geht auch, solange ich keine Parameter übergeben muß. ( Die Zahlen vorm Befehl sind Zeilenzahlen und dienen nur dazu, daß ich hier Bezug nehmen kann. Die sind im Originalcode natürlich nicht drin :) )
....
1 this.dedialer[lauf].DoubleClick += new System.EventHandler(this.dialerdbclick(id));
...

Die zugehörige Funktion soll nachher mehr machen, aber zuerst mal soll sie nur die übergebene ID ausgeben.

2 private void dialerdbclick(string id)
3 {
4 MessageBox.Show(id.ToString());
5 }

Wenn ich es übersetze, krieg ich als Fehlermeldung :

Methodenname wird erwartet. Markiert ist this.dialerdbclick(id) in der Zeile 1

Kann mir da jemand bitte helfen und mir sagen, was da falsch dran ist ?

Markus
 
Hi,

dem EventHandler übergibst du lediglich den Methodenname, also dialerdbclick .. keine Klammern, wie beim Aufruf einer Methode und dementsprechend auch keine Parameter. Was genau willst denn machen ?

MfG
 
Original geschrieben von erik s.

Was genau willst denn machen ?

beim Doppelklick auf eines der Icons soll ein neues Fenster aufgehen und genauere Infos anzeigen. Dazu muss das Fenster aber übergeben bekommen ( oder zumindest irgendwie rausbekommen ) auf welches Icon geklickt wurde.
Da die Icons aber dynamisch angelegt werden, haben sind sie alle in einem Array.
Also woher kann die Funktion, die beim Doppelklicken aufgerufen wird, wissen, welches Icon geklickt wurde ? Sie muß nur eine einzige Zahl kriegen.

Markus
 
Hallo.

Code:
 private void dialerdbclick(string id)

Das kann schon mal kein gültiger Eventhandler für ein DoubleClick Ereigniss sein.

Der EventHandler delegate sieht immer folgendermassen aus:
Code:
public delegate void EventHandler(
   object sender,
   EventArgs e
);

Also muss deine Methode so aussehen
Code:
 private void dialerdbclick(object sender, EventArgs ea)

sender ist ein Verweis auf das Objekt, welches das Event ausgelöst hat.

Diese Daten sollten ausreichen um das Objekt zu identifizieren, und dann eben die entsprechenden Daten anzuzeigen, oder was auch immer.

Mfg,
Alex
 
Angenommen die Icons besitzen immer noch eine Eigenschaft Text, dann funktioniert das etwa so:

Code:
this.dedialer[lauf].DoubleClick += new System.EventHandler(this.dialerdbclick);

// sender enthält Informationen über den Aufrufer des Ereignisses
// e enthält Informationen über das Ereignis selbst 
private void dialerdbclick(object sender, System.EventArgs e)
{
    // Um auf die Text Eigenschaft des Icons (sender) zugreifen zu können
    // müssen wir das sender-objekt explizit zum entsprechenden Objekttyp
    // casten (in meinem Fall ist es ein Button, den musst du durch die Klasse
    // ersetzen, die du für deine Icons verwendet hast).
    MessageBox.Show(  ((System.Windows.Forms.Button) sender).Text  );
}

Damit müsste es eigentlich gehen.
 
Zuletzt bearbeitet:
mit den Veränderungen im Aufruf und
MessageBox.Show( ((System.Windows.Forms.Button) sender).Name
( mit Anpassungen des Casts natürlich )
ging es dann.

Vielen Dank für die Hilfe

Markus
 
Zurück