Каков предпочтительный/самый простой способ найти элемент управления, который в настоящее время получает вход пользователя (клавиатуры) в WinForms?
До сих пор я придумал следующее:
public static Control FindFocusedControl(Control control)
{
var container = control as ContainerControl;
return (null != container
? FindFocusedControl(container.ActiveControl)
: control);
}
Из формы это можно назвать просто (в .NET 3.5+ это может быть даже определено как метод расширения в форме) -
var focused = FindFocusedControl(this);
Соответственно ли это?
Есть ли встроенный метод, который я должен использовать вместо этого?
Обратите внимание, что одного вызова ActiveControl недостаточно, когда используются иерархии. Представьте себе:
Form
TableLayoutPanel
FlowLayoutPanel
TextBox (focused)
(formInstance).ActiveControl вернет ссылку на TableLayoutPanel, а не TextBox (поскольку ActiveControl, кажется, возвращает только активный активный дочерний элемент в дереве управления, в то время как я ищу элемент управления листьями).