VBA-Userform-EventListener
                                
                                 VBA-Userform-EventListener copied to clipboard
                                
                                    VBA-Userform-EventListener copied to clipboard
                            
                            
                            
                        🎉 A very easy way to add event listeners to a userform.
VBA Userform EventListener
A very easy way to add event listeners to a userform.
Getting Started
Importing or copying both EventListenerEmitter.cls and EventListenerItem.cls is required in order to work!
Here is a basic template, simply add this to a userform.
Private WithEvents Emitter As EventListenerEmitter
Private Sub UserForm_Activate()
    Set Emitter = New EventListenerEmitter
    Emitter.AddEventListenerAll Me
End Sub
That's it, now you can start listening for events!
Listening for the events
You can listen for all events in one event handler Emitter_EmittedEvent or each individual controls events. see the example below.
' EXAMPLE SHOWING A BASIC WAY OF DOING A HOVER EFFECT
Private Sub Emitter_EmittedEvent(Control As Object, ByVal EventName As EmittedEvent, EventParameters As Collection)
    ' Select statements are really handy working with these events in this way.
    Select Case True
        ' Change color when mouseover, for a fun hover effect :)
        Case EventName = MouseOver And TypeName(Control) = "CommandButton"
            Control.BackColor = 9029664
        ' Don't forget to change it back!
        Case EventName = MouseOut And TypeName(Control) = "CommandButton"
            Control.BackColor = 8435998
    End Select
End Sub
You can also listen just to specific events as well.
Private Sub Emitter_Focus(Control As Object)
    ' CHANGE BORDER COLOR FOR TEXTBOX TO A LIGHT BLUE
    If TypeName(Control) = "TextBox" Then
        Control.BorderColor = 16034051
    End If
End Sub
Private Sub Emitter_Blur(Control As Object)
    ' CHANGE BORDER COLOR BACK TO A LIGHT GREY
    If TypeName(Control) = "TextBox" Then
        Control.BorderColor = 12434877
    End If
End Sub
Or you can listen to specific events on specific controls
Private Sub Emitter_CommandButtonMouseOver(CommandButton As MSForms.CommandButton)
    CommandButton.Backcolor = 9029664
End Sub
Private Sub Emitter_CommandButtonMouseOut(CommandButton As MSForms.CommandButton)
    CommandButton.Backcolor = 8435998
End Sub
Note
This is in the early stages, so feel free to use it as you wish. Currently, the events emitted are pretty simple: Click, DoubleClick, MouseOver, MouseOut, MouseMove, MouseDown, and MouseUp.
As I have time I'll be adding more events and seeing if I have any needed improvements.
Feel free to do a pull request if you added to it or improved it in any way!
Also, I've posted this code on codereview. Feel free to make suggestions or improvements there as well!
