在 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)
(表格格式)。ActiveControl 将返回对 TableLayoutPanel 的引用,而不是 TextBox (因为 ActiveControl 似乎只返回控件树中的即时活动子节点,而我正在寻找叶子控件)。