События GotFocus / LostFocus генерируются сообщениями Windows, WM_SETFOCUS и WM_KILLFOCUS соответственно. Они немного хлопотны, особенно WM_KILLFOCUS, который склонен к тупику. Логика внутри Windows Forms, которая обрабатывает логику проверки (например, событие Validating), может отменять изменения фокуса. Другими словами, фокус фактически изменился, но затем код проверки переместил его обратно. Логическое состояние вашего пользовательского интерфейса состоит в том, что он никогда не двигался, и вы не должны знать, что это произошло.
События Enter / Leave позволяют избежать неприятностей, которые могут вызывать события уведомления о смене фокуса на низком уровне, они генерируются, когда Winforms установили истинный фокус. Вы почти всегда хотите использовать их.