Мы реализовали элемент управления ActiveX на основе WinForms UserControl в VB.NET 2010. Он используется в пользовательских формах VBA через COM-взаимодействие. Все работает нормально - кроме одного. Когда фокус ввода перемещается с ActiveX на другой собственный элемент управления VBA в UserForm (например, Command Button), мы не можем обнаружить это. Такие стандартные управляющие события WinForms, такие как Leave или Validating, в этом случае не запускаются.
Как это отследить (лучше "управляемым" способом, без уловок WinAPI)?
Обратите внимание, что наш UserControl содержит другие элементы управления WinForms, такие как кнопки или текстовые поля, поэтому нам нужно событие LostFocus для всего элемента управления, представленного как ActiveX, независимо от того, какая составляющая часть была выбрана.