Entwickler-Ecke

Basistechnologien - void sender object


r0land - Mo 11.05.09 09:55
Titel: void sender object
Hi

Wie kann ich zB bei dem Click-Ereignis eines ToolStripMenuItem's von sender die Eigenschaften .name oder .text auslesen?


Quelltext
1:
2:
3:
4:
void ToolStripMenuItem11Click(object sender, EventArgs e)
{

}


sender.name oder sender.text gibts nicht... das kenne ich schon von VB. Wobei ich meiner Meinung nach trotzdem auf sender.name zugreifen konnte und darüber dann an die Daten kam.

Das ist mein erster Gehversuch mit C#... und ich hätte nicht gedacht, daß ich daran schon verzweifeln würde :/

Achso... ich verwende SharpDevelop3 und .Net 3.5

Mag mir jemand nen Tipp geben?

Grüße


Greenberet - Mo 11.05.09 10:04

du musst sender nach ToolStripMenuItem casten:

C#-Quelltext
1:
ToolStripMenuItem s = (ToolStripMenuItem)sender;                    


JüTho - Mo 11.05.09 10:16

Sicherer ist folgende Variante:

C#-Quelltext
1:
2:
ToolStripMenuItem s = sender as ToolStripMenuItem;
if (s != null) { ... };

Hintergrund: Wenn sender wider Erwarten nicht dem gewünschten Typ entspricht, wird bei "as" null geliefert, was abgeprüft werden kann; bei der "einfachen" Variante gibt es aber eine Exception - bäng.

Gruß Jürgen


Greenberet - Mo 11.05.09 10:24

ja allerdings sollte dieser Fall bei einem Event nicht auftreten ( abgesehen davon dass deine Variante zwar sicherer, dafür langsamer ist )


r0land - Mo 11.05.09 16:01

Klasse - danke euch beiden!


Kha - Mo 11.05.09 17:40

user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
bei der "einfachen" Variante gibt es aber eine Exception - bäng.
Natürlich, alles andere wäre auch fatal. Exceptions sollen schließlich signalisieren, dass eine Methode das, wozu sie gedacht ist, nicht erfüllen kann. Wenn ich einen Handler schreibe, der den Text des aufgerufenen Items verarbeiten soll, dann will ich auch darüber informiert werden, wenn sie es wider Erwarten nicht kann :) . Ein as wäre eine Schwächung des Contracts der Methode, die gut begründet werden muss, wenn es beispielsweise eben Sinn macht, den Handler auch für andere Komponenten zu verwenden.

user profile iconGreenberet hat folgendes geschrieben Zum zitierten Posting springen:
abgesehen davon dass deine Variante [...] langsamer ist
Abgesehen davon, dass sich der Code auf einer Ebene befindet, in der das Wort Performance nichts zu suchen hat ;) , wüsste ich nicht, warum das zutreffen sollte. In Delphi mag das stimmen, aber .NET kennt ja dessen "harte Casts" gar nicht.