I also use System.Windows.Forms.Timer for this solution, but I no longer use mouse I / O events. They caused me too much grief. Instead, I use the MouseMove event for a component that needs to know that the mouse has ended. I have 2 members of variables named in this class.
bool Hovering = false; System.Drawing.Point LastKnownMousePoint = new System.Drawing.Point();
In my case, I wanted to switch the border around the label. I am dealing with the understanding that the mouse is over the label control, which I care about the following:
private void label1_MouseMove(object sender, MouseEventArgs e) {
This works because I update LastKnownMousePoint when the mouse is over the control (label in this case). So, if the mouse moves outside the control, I will not update LastKnownMousePoint, and I will find out what time it is to switch the border style.
source share