0
我有一個SplitContainer。在兩個面板上都有一些控件填充它們。我想確定哪個小組正在進行側重點控制。我的意思是當控制焦點 - 我想知道,例如Panel1得到了專注。沒有通過事件就可以實現嗎?檢測SplitContainer的活動面板(Visual C#Express 2010,WinForms)
編輯: 我需要它與嵌套控件一起工作。
我有一個SplitContainer。在兩個面板上都有一些控件填充它們。我想確定哪個小組正在進行側重點控制。我的意思是當控制焦點 - 我想知道,例如Panel1得到了專注。沒有通過事件就可以實現嗎?檢測SplitContainer的活動面板(Visual C#Express 2010,WinForms)
編輯: 我需要它與嵌套控件一起工作。
您可以使用此代碼。它返回第一個面板和一個集中控制。不適用於嵌套控件(即TextBox
在Panel
的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));
這是一個很好的解決方案,但我需要它嵌套控件。如果沒有解決方案出現,我會將其標記爲最接近我需要的。 – Joe
@Joe我編輯了我的帖子,以適應您的要求。 – Mir
這真的很不錯。唯一的問題是,它將不得不被全球應用程序點擊事件觸發,因此每次點擊都會影響到所有SplitterPanel的子項的迭代。但它仍然是非常好的解決方案。謝謝你。 – Joe