为发送者对象处理程序创建函数

create function for sender object handler

如何为发件人创建对象点击功能?我尝试了一些东西,但没有成功。

 Private Function functionName(ByVal sender As Object, e As EventArgs)

        If sender.checked = True Then
            For i As Integer = 2 To 14
                If i <> 2 Then
                    Dim cbClubs = DirectCast(Controls.Item("cbBtt" & i & "detrefla"), CheckBox) 'Clubs
                    cbClubs.Checked = False
                End If
            Next
        End If

    End Function

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        functionName(cbBtt2detrefla, sender)
    End Sub

让我们在这段代码中添加一些顺序。

Private Function functionName(ByVal sender As Object, e As EventArgs)
   '...
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    functionName(cbBtt2detrefla, sender)
End Sub

为什么要在 functionName(...) 声明中使用 e As EventArgs?它从未被使用过,所以你可以删除它:

Private Function functionName(ByVal sender As Object)

在 functionName 中你正在评估 sender.Checked(提示:你可以使用 If sender.Checked 而不是 If sender.Checked = True):为什么不将 sender 定义为 CheckBox,而不是 Object?

Private Function functionName(ByVal sender As CheckBox)

现在,让我们看看 for 循环:

For i As Integer = 2 To 14
    If i <> 2 Then
        '...
    End If
Next

你正在计算 i 从 2 到 14,但如果 i = 2 你不想做任何事情。为什么不从 i = 3 开始 for 循环?更快更好。

For i As Integer = 3 To 14
    '...
Next

另一件事:functionName() 不产生输出,所以它应该是 Sub,而不是 Function

现在,您的代码是:

Private Sub functionName(ByVal sender As CheckBox)
    If sender.Checked Then
        For i As Integer = 3 To 14
            '...
        Next
    End If
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    functionName(cbBtt2detrefla)
End Sub

此外,如果functionName只被Button1_Click调用并且这里它只与cbBtt2detrefla一起使用,你可以避免将两个subs分开:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click    
    If cbBtt2detrefla.Checked Then
        For i As Integer = 3 To 14
            '...
        Next
    End If
End Sub

最后但同样重要的是:

Dim cbClubs = DirectCast(Controls.Item("cbBtt" & i & "detrefla"), CheckBox) 'Clubs
cbClubs.Checked = False

这仅在 cbBtt3detrefla 和其他复选框直接位于表单上时有效。例如,如果它们在 Panel 中,您将得到 System.NullReferenceException。如果你想迭代每个控件,你可以做类似 .