检测 SplitContainer 的活动面板(Visual C# Express 2010, WinForms)



我有一个SplitContainer。在两个面板上,都有一些控件填充它们。我想确定哪个小组持有直接集中的控制权。我的意思是当控制得到焦点时 - 我想知道例如 Panel1 得到了焦点。这有可能在不通过事件的情况下实现吗?

编辑:我需要它与嵌套控件一起使用。

您可以使用

此代码。它返回具有焦点控件的第一个面板。不适用于嵌套控件(即SplitterPanelPanel中的TextBox)。

var panels = splitContainer1.Controls.OfType<SplitterPanel>();
var focusedPanel = panels.FirstOrDefault(p => p.Controls.OfType<Control>().
                          Any(c => c.Focused));

编辑:要支持递归子检测,您可以使用此方法:

static IEnumerable<Control> GetNestedChildren(Control container)
{
    var children = container.Controls.OfType<Control>().ToArray();
    return children.Concat(children.SelectMany(GetNestedChildren));
}

你以前的代码将变成:

var panels = splitContainer1.Controls.OfType<SplitterPanel>();
var focusedPanel = panels.
    FirstOrDefault(p => GetNestedChildren(p).
        Any(c => c.Focused));

相关内容

  • 没有找到相关文章

最新更新