none
Sender: Verstehe das Verhalten nicht. RRS feed

  • 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

    Samstag, 6. Juli 2013 17:58

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.

    Samstag, 6. Juli 2013 18:41
    Moderator
  • 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
    Sonntag, 7. Juli 2013 06:15

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.

    Samstag, 6. Juli 2013 18:41
    Moderator
  • 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
    Sonntag, 7. Juli 2013 06:15
  • 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

    Sonntag, 7. Juli 2013 11:59