Benutzer mit den meisten Antworten
Sender: Verstehe das Verhalten nicht.

Frage
-
Tag,
in trackbar-ereignis:
Private Sub TbrSpeed_ValueChanged(sender As Object, e As System.EventArgs) Handles TbrSpeed.ValueChanged
war ich davon ausgegangen, dass man mittels sender erkennen kann, wer das Ereignis ausgelöst hat, ZB durch Mausklick auf den Trackbar, oder durch Setzen der Value-Eigenschaft per code. Das ist aber nicht so. Das objekt scheint immer die Trackbar zu sein.
1. Was sagt sender denn dann eigentlich aus?
2. Gibts eine Möglichkeit, herauszufinden, wodurch dieses Ereignis ausgelöst wurde?
Gruß und Dank
TH
Antworten
-
Hallo, das ist richtig, das sender immer das auslösende Objekt ist (die TrackBar, der Button, ...). Das kann man beispielsweise dafür verwenden, wenn mehrere Controls den gleichen Eventhandler bräuchten, das man nur einen schreibt und über sender auf das Control zugreifen kann bzw. herausfindet von wo das Event kommt.
Die einzige Möglichkeit, die ich sehe, um herauszufinden wie das Event zu stande kam, ist die zugehöhrigen Eingabeevents abzufangen. Fange also KeyDown, MouseDown, MouseMove usw. ab. Dann speicherst du den Wert in einem Feld und und fragst beim ValueChanged diesen Wert ab. So bekommt man das heraus.
<Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite | Code Beispiele | Facebook | Twitter | Snippets
Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
Einen Konverter zwischen C# und VB.NET Code gibt es hier.- Als Antwort markiert Migration Sucks Sonntag, 7. Juli 2013 12:01
-
Hallo,
zusätzlich zu Koopakillers Antwort, was ist daran unverständlich? "Sender" ist immer das Objekt welches das Ereignis gefeuert hat, also in der Regel ein Klasse, hier ein Control. "e" liefert Dir dann spezielle Informationen wenn es sie gibt. Die Signatur des Handlers ist einheitlich, erst kommt der "Verursacher"(Sender) und seine Argumente(e). Wenn Du also spezielle Informationen brauchst musst Du "e" untersuchen.
Private Sub TrackBar1_KeyDown(sender As Object, e As KeyEventArgs) Handles TrackBar1.KeyDown If e.KeyCode = Keys.Left Then 'Something todo End If End Sub Private Sub TrackBar1_MouseDown(sender As Object, e As MouseEventArgs) Handles TrackBar1.MouseDown If e.Button = Windows.Forms.MouseButtons.Left Then 'Something todo End If End Sub
Gruß Scotty- Als Antwort markiert Migration Sucks Sonntag, 7. Juli 2013 12:00
Alle Antworten
-
Hallo, das ist richtig, das sender immer das auslösende Objekt ist (die TrackBar, der Button, ...). Das kann man beispielsweise dafür verwenden, wenn mehrere Controls den gleichen Eventhandler bräuchten, das man nur einen schreibt und über sender auf das Control zugreifen kann bzw. herausfindet von wo das Event kommt.
Die einzige Möglichkeit, die ich sehe, um herauszufinden wie das Event zu stande kam, ist die zugehöhrigen Eingabeevents abzufangen. Fange also KeyDown, MouseDown, MouseMove usw. ab. Dann speicherst du den Wert in einem Feld und und fragst beim ValueChanged diesen Wert ab. So bekommt man das heraus.
<Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite | Code Beispiele | Facebook | Twitter | Snippets
Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
Einen Konverter zwischen C# und VB.NET Code gibt es hier.- Als Antwort markiert Migration Sucks Sonntag, 7. Juli 2013 12:01
-
Hallo,
zusätzlich zu Koopakillers Antwort, was ist daran unverständlich? "Sender" ist immer das Objekt welches das Ereignis gefeuert hat, also in der Regel ein Klasse, hier ein Control. "e" liefert Dir dann spezielle Informationen wenn es sie gibt. Die Signatur des Handlers ist einheitlich, erst kommt der "Verursacher"(Sender) und seine Argumente(e). Wenn Du also spezielle Informationen brauchst musst Du "e" untersuchen.
Private Sub TrackBar1_KeyDown(sender As Object, e As KeyEventArgs) Handles TrackBar1.KeyDown If e.KeyCode = Keys.Left Then 'Something todo End If End Sub Private Sub TrackBar1_MouseDown(sender As Object, e As MouseEventArgs) Handles TrackBar1.MouseDown If e.Button = Windows.Forms.MouseButtons.Left Then 'Something todo End If End Sub
Gruß Scotty- Als Antwort markiert Migration Sucks Sonntag, 7. Juli 2013 12:00
-
was ist daran unverständlich? "Sender" ist immer das Objekt welches das Ereignis gefeuert hat, also in der Regel ein Klasse, hier ein Control. "
Nun ich war der Meinung (und Hoffnung) man könnte da eine Information bekommen, wie das Ereignis ausgelöst wurde, per code, Mausklick, Tastatur o.ä..
Vielen Dank, hab Eure Antwort aber verstanden.
TH