SplitContainer があります。両方のパネルにいくつかのコントロールがあります。どのパネルが実際にフォーカスされたコントロールを保持しているかを特定したいと思います。つまり、コントロールがいつフォーカスされたかを知りたいのです。たとえば、Panel1 がフォーカスされたことを知りたいのです。イベントを渡さずに達成することは可能ですか?
編集:ネストされたコントロールを操作するために必要です。
SplitContainer があります。両方のパネルにいくつかのコントロールがあります。どのパネルが実際にフォーカスされたコントロールを保持しているかを特定したいと思います。つまり、コントロールがいつフォーカスされたかを知りたいのです。たとえば、Panel1 がフォーカスされたことを知りたいのです。イベントを渡さずに達成することは可能ですか?
編集:ネストされたコントロールを操作するために必要です。
このコードを使用できます。コントロールがフォーカスされた最初のパネルを返します。TextBox
ネストされたコントロール (つまり a in a Panel
in 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));