为发送者对象处理程序创建函数
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
。如果你想迭代每个控件,你可以做类似 .
如何为发件人创建对象点击功能?我尝试了一些东西,但没有成功。
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
。如果你想迭代每个控件,你可以做类似