.net 在VisualStudio中优化事件代码

.net 在VisualStudio中优化事件代码,.net,vb.net,visual-studio,.net,Vb.net,Visual Studio,我对VB非常陌生,我想知道是否有更好的方法来编写下面的代码。我的表单顶部有6个按钮,当鼠标进入和离开时,这些按钮会改变颜色。尽管如此,如果不为每个按钮、每个鼠标移动编写单独的sub,我无法找到一种方法来实现这一点。有没有想过要缩小这个代码?谢谢 Private Sub Button1_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter Butto

我对VB非常陌生,我想知道是否有更好的方法来编写下面的代码。我的表单顶部有6个按钮,当鼠标进入和离开时,这些按钮会改变颜色。尽管如此,如果不为每个按钮、每个鼠标移动编写单独的sub,我无法找到一种方法来实现这一点。有没有想过要缩小这个代码?谢谢

Private Sub Button1_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter
    Button1.ForeColor = Color.White
End Sub

Private Sub Button1_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.MouseLeave
    Button1.ForeColor = Color.Black
End Sub

Private Sub Button2_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.MouseEnter
    Button2.ForeColor = Color.White
End Sub

Private Sub Button2_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.MouseLeave
    Button2.ForeColor = Color.Black
End Sub

Private Sub Button3_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.MouseEnter
    Button3.ForeColor = Color.White
End Sub

Private Sub Button3_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.MouseLeave
    Button3.ForeColor = Color.Black
End Sub

Private Sub Button4_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.MouseEnter
    Button4.ForeColor = Color.White
End Sub

Private Sub Button4_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.MouseLeave
    Button4.ForeColor = Color.Black
End Sub

Private Sub Button5_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.MouseEnter
    Button5.ForeColor = Color.White
End Sub

Private Sub Button5_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.MouseLeave
    Button5.ForeColor = Color.Black
End Sub

Private Sub Button6_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.MouseEnter
    Button6.ForeColor = Color.White
End Sub

Private Sub Button6_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.MouseLeave
    Button6.ForeColor = Color.Black
End Sub

可以有多个句柄项,如下所示:

Private Sub Button_Enter(sender As Object, e As EventArgs) Handles _
    Button1.MouseEnter, Button2.MouseEnter, Button3.MouseEnter, Button4.MouseEnter, Button5.MouseEnter, Button6.MouseEnter

    Dim bn As Button = DirectCast(sender, Button)
    bn.BackColor = Color.White
End Sub

Private Sub Button_Leave(sender As Object, e As EventArgs) Handles _
    Button1.MouseLeave, Button2.MouseLeave, Button3.MouseLeave, Button4.MouseLeave, Button5.MouseLeave, Button6.MouseLeave

    Dim bn As Button = DirectCast(sender, Button)
    bn.BackColor = Color.Black
End Sub
Private Sub Button_Enter(sender As Object, e As EventArgs)
    Dim bn As Button = DirectCast(sender, Button)
    bn.BackColor = Color.White
End Sub

Private Sub Button_Leave(sender As Object, e As EventArgs)
    Dim bn As Button = DirectCast(sender, Button)
    bn.BackColor = Color.Black
End Sub

Private Sub SetButtonHandlers()
    Dim bns() As Button = {Button1, Button2, Button3, Button4, Button5, Button6}
    For Each bn In bns
        AddHandler bn.MouseEnter, AddressOf Button_Enter
        AddHandler bn.MouseLeave, AddressOf Button_Leave
    Next

End Sub

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

End Sub
也可以通过代码分配处理程序,如下所示:

Private Sub Button_Enter(sender As Object, e As EventArgs) Handles _
    Button1.MouseEnter, Button2.MouseEnter, Button3.MouseEnter, Button4.MouseEnter, Button5.MouseEnter, Button6.MouseEnter

    Dim bn As Button = DirectCast(sender, Button)
    bn.BackColor = Color.White
End Sub

Private Sub Button_Leave(sender As Object, e As EventArgs) Handles _
    Button1.MouseLeave, Button2.MouseLeave, Button3.MouseLeave, Button4.MouseLeave, Button5.MouseLeave, Button6.MouseLeave

    Dim bn As Button = DirectCast(sender, Button)
    bn.BackColor = Color.Black
End Sub
Private Sub Button_Enter(sender As Object, e As EventArgs)
    Dim bn As Button = DirectCast(sender, Button)
    bn.BackColor = Color.White
End Sub

Private Sub Button_Leave(sender As Object, e As EventArgs)
    Dim bn As Button = DirectCast(sender, Button)
    bn.BackColor = Color.Black
End Sub

Private Sub SetButtonHandlers()
    Dim bns() As Button = {Button1, Button2, Button3, Button4, Button5, Button6}
    For Each bn In bns
        AddHandler bn.MouseEnter, AddressOf Button_Enter
        AddHandler bn.MouseLeave, AddressOf Button_Leave
    Next

End Sub

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

End Sub

如果要添加或删除按钮,或给它们起有用的名字,后者更容易更新,因为它们只在一个地方列出。

太好了!正是我需要的。非常感谢!