VB.NET What is Sender used for?

前端 未结 3 584
不知归路
不知归路 2020-12-18 00:41

I\'m confused as to the purpose of the sender parameter in Winform controls, for example:

Private Sub Form1_Load(sender As System.Object, e As S         


        
相关标签:
3条回答
  • 2020-12-18 00:53

    For the first half of the question:

    sender is used when the callback handles multiple events, to know which object did fire the event.

    For example, instead of cut-and-paste the same code in two callback functions, you can have the same code managing two different button click events:

    Private Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click
       Dim s As String
       If sender Is Button1 Then
          s = "button1"
       ElseIf sender Is Button2 Then
          s = "button2"
       End If
       MessageBox.Show("You pressed: " + s)
    End Sub
    

    Reference here.

    0 讨论(0)
  • 2020-12-18 00:56

    sender contains the sender of the event, so if you had one method bound to multiple controls, you can distinguish them.

    For example, if you had ten buttons and wanted to change their text to "You clicked me!" when you clicked one of them, you could use one separate handler for each one using a different button name each time, but it would be much better to handle all of them at once:

    Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click, Button6.Click, Button7.Click, Button8.Click, Button9.Click
        DirectCast(sender, Button).Text = "You clicked me!"
    End Sub
    
    0 讨论(0)
  • 2020-12-18 01:07

    e refers to the event arguments for the used event, they usually come in the form of properties/functions/methods that get to be available on it.

    In this example the label text property will contain the BorderColor set for the footer style of our GridView when its FooterRow, determined from the row sent as a property on the event arguments parameter, binds the data with the GridView DataSource.

    Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
            If e.Row.RowType = DataControlRowType.Footer Then
                lblFooterColor.Text = e.Row.Style("BorderColor")
            End If
    End Sub
    
    0 讨论(0)
提交回复
热议问题