“主动”控制和“聚焦”控制之间的区别

时间:2013-12-30 20:53:39

标签: c# winforms

我试图弄清楚为什么这两行代码有时会返回不同的值:

var focus = FindFocusedControl(_targetForm).Name;
var active = _targetForm.ActiveControl.Name;

FindFocusedControl来自here

private static Control FindFocusedControl(Control control)
{
    var container = control as ContainerControl;
    while (container != null)
    {
        control = container.ActiveControl;
        container = control as ContainerControl;
    }
    return control;
}

我的active只是最不能被钻进的人吗?是否取决于实际具有焦点的控件是否位于UserControl

1 个答案:

答案 0 :(得分:1)

_targetForm.ActiveControl将在具有焦点或它的一个子控件具有焦点的窗体上返回该控件。

您的FindFocusedControl实现也执行相同的操作,但是递归检查子控件,直到子控件到达具有焦点的控件,然后将其返回。

因此,对于直接在窗体上的控件,它们将返回相同的值,但是对于堆叠在面板或其他容器上的控件,返回的值将不同。