0

SplitContainer があります。両方のパネルにいくつかのコントロールがあります。どのパネルが実際にフォーカスされたコントロールを保持しているかを特定したいと思います。つまり、コントロールがいつフォーカスされたかを知りたいのです。たとえば、Panel1 がフォーカスされたことを知りたいのです。イベントを渡さずに達成することは可能ですか?

編集:ネストされたコントロールを操作するために必要です。

4

1 に答える 1

1

このコードを使用できます。コントロールがフォーカスされた最初のパネルを返します。TextBoxネストされたコントロール (つまり a in a Panelin a )では機能しませんSplitterPanel

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));
于 2012-12-18T14:58:28.667 に答える