8

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

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

End Sub

我知道我可以sender通过这样做来验证什么是正确的:

If TypeOf sender Is Label Then
 'Execute some code...
End If

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

这两个参数的一些常见用法是什么?他们总是需要吗?

谢谢,

达扬 D.

4

3 回答 3

18

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
于 2012-07-29T21:52:32.503 回答
5

e指已使用事件的事件参数,它们通常以可用的属性/函数/方法的形式出现。

在此示例中,标签文本属性将包含为我们的页脚样式设置的 BorderColor,GridView当它的 FooterRow(从作为事件参数参数上的属性发送的行确定)将数据与 GridView 数据源绑定时。

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
于 2012-07-29T22:29:37.947 回答
2

对于问题的前半部分:

sender当回调处理多个事件时使用,以了解哪个对象触发了事件。

例如,您可以使用相同的代码管理两个不同的按钮单击事件,而不是在两个回调函数中剪切和粘贴相同的代码:

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

参考这里

于 2016-01-14T11:43:21.953 回答