Обратите внимание, что при использовании иерархий одного вызова ActiveControl недостаточно. Представьте себе:
Form
TableLayoutPanel
FlowLayoutPanel
TextBox (focused)
(formInstance).ActiveControl
вернет ссылку на TableLayoutPanel
, а не TextBox
Так что используйте это (полное раскрытие: адаптировано из этого ответа C # )
Function FindFocussedControl(ByVal ctr As Control) As Control
Dim container As ContainerControl = TryCast(ctr, ContainerControl)
Do While (container IsNot Nothing)
ctr = container.ActiveControl
container = TryCast(ctr, ContainerControl)
Loop
Return ctr
End Function