У меня было немного хакерское решение. В вашем событии Deactivate запустите другое настраиваемое событие для вашей главной формы. Затем, когда ваша основная форма обрабатывает пользовательское событие, перечислите его через свой элемент управления (this.Controls) и найдите элемент управления под мышью, проверив все их границы, затем вызовите Focus (). Возможно, вам придется отсортировать по тому, который имеет наименьшую площадь поверхности, или для этой цели у вас может быть отдельный список «похожих на фокус» кнопок управления.
Другим способом может быть переключение фокуса на основную форму сразу после OnMouseLeave плавающего окна или OnMouseHover вашего основного окна, но держите плавающие окна наверху, просто без фокуса. Удерживая глобальную мышь над основной формой, закройте всплывающее окно.
Это всего лишь теории, не проверенные.