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
JüTho hat folgendes geschrieben : |
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.
Greenberet hat folgendes geschrieben : |
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!