2012-12-18 27 views

回答

1

您可以使用此代碼。它返回第一個面板和一個集中控制。不適用於嵌套控件(即TextBoxPanelSplitterPanel中)。

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)); 
+0

這是一個很好的解決方案,但我需要它嵌套控件。如果沒有解決方案出現,我會將其標記爲最接近我需要的。 – Joe

+0

@Joe我編輯了我的帖子,以適應您的要求。 – Mir

+0

這真的很不錯。唯一的問題是,它將不得不被全球應用程序點擊事件觸發,因此每次點擊都會影響到所有SplitterPanel的子項的迭代。但它仍然是非常好的解決方案。謝謝你。 – Joe

相關問題