Reputation: 3
I'm pretty new with VB and I was wondering if there was a better way to write the following code. I have 6 buttons across the top of my form that I have changing colors when the mouse enters and leaves them. Though, I couldn't figure out a way to do this without writing separate subs for each button, for each mouse movement. Any thoughts on shrinking this code? Thanks!
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
Upvotes: 0
Views: 42
Reputation: 25023
You can have more than one Handles item, like this:
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
Or you can assign the handlers through code, like this:
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
The latter is easier to update if you were to add or remove buttons, or give them useful names, as they are listed in only one place.
Upvotes: 2