VB.NET什么是Sender用于?

Day*_*yan 8 vb.net sender

我对senderWinform控件中参数的用途感到困惑,例如:

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

End Sub
Run Code Online (Sandbox Code Playgroud)

我明白我可以sender通过做某事来验证是什么:

If TypeOf sender Is Label Then
 'Execute some code...
End If
Run Code Online (Sandbox Code Playgroud)

但是,当它为我生成子程序时,是否有充分的理由将发送者包含在每个控件中?换句话说,我双击一个表格,我得到了Private Sub form_load (sender....) e As System.EventArg.

这两个参数有哪些常见用法?他们总是需要吗?

谢谢,

达扬D.

Ry-*_*Ry- 17

sender 包含事件的发件人,因此如果您有一个方法绑定到多个控件,您可以区分它们.

例如,如果您有十个按钮并想将其文本更改为"您点击了我!" 当你点击其中一个时,你可以为每一个使用一个单独的处理程序,每次使用不同的按钮名称,但是一次处理所有这些处理器会好得多:

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
Run Code Online (Sandbox Code Playgroud)

  • @Intrus:我正在使用`DirectCast`因为`sender`被声明为`Object`(这就是事件处理程序的工作方式)而且我可以假设它是一个`Button`,所以这就是为什么我在没有检查的情况下进行投射.如果您在没有`Option Strict On`的情况下进行编码,那么它*将使用`sender.Text`进行编译,但它会更慢,并且以后查找错误会更加困难.(ProTip:总是打开`Option Strict On`!它在你的设置中.) (5认同)

Cod*_*ler 5

e 指的是使用过的事件的事件参数,它们通常以可在其上获得的属性/函数/方法的形式出现.

在此示例中,标签文本属性将包含为我们的页脚样式设置的BorderColor GridView,其FooterRow(根据作为事件参数参数的属性发送的行确定)使用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
Run Code Online (Sandbox Code Playgroud)