查找当前正在WinForms中接收用户(键盘)输入的控件的首选/最简单方法是什么?
到目前为止,我已经得出以下结论:
public static Control FindFocusedControl(Control control)
{
var container = control as ContainerControl;
return (null != container
? FindFocusedControl(container.ActiveControl)
: control);
}
在表单中,这可以简单地称为(在.NET3.5+中,这甚至可以定义为表单上的扩展方法)-
var focused = FindFocusedControl(this);
这样合适吗?
有没有我应该改用的内置方法?
请注意,使用层次 struct 时,对ActiveControl的单个调用是不够的.想象一下:
Form
TableLayoutPanel
FlowLayoutPanel
TextBox (focused)
(formInstance).ActiveControl将返回对TableLayoutPanel的引用,而不是文本框(因为在我寻找叶控件时,ActiveControl似乎只返回控件树中的立即活动子控件).