2014-01-10 70 views
1

而不是寫出有沒有辦法顯示或列出子控件的所有父容器?

var parentContainer0 = this.Parent; 
var parentContainer1 = parentContainer0.Parent; 
var parentContainer2 = parentContainer1.Parent; 

有沒有更好的辦法來列出父容器的所有層?

+5

你的3個變量指向同一個對象。這沒有意義。 –

+0

感謝您的接受,我已經糾正它。 – Ernest

回答

2

要獲得所有祖先的序列,你可以寫一個迭代器塊很容易地計算它:如果你想在第N代的家長,您可以在此順序使用ElementAt

public static IEnumerable<Control> GetAncestors (Control control) 
{ 
    var current = control.Parent; 
    while (current != null) 
    { 
     yield return current; 
     current = current.Parent; 
    } 
} 

,使用LINQ:

var grandparent = someControl.ElementAt(2); 
+0

+1,雖然我會做這個擴展 –

+1

@HighCore我不會用它足以證明它。如果它在某些情況下被足夠頻繁地使用,我會考慮它。最終,讀者可以自由地做出這種微不足道的改變。 – Servy

+0

這絕對有用,謝謝。我想知道什麼是最好的方法,如果可能的話,創建一個所有父母的名單。我的一些控件在不同數量的容器中分層次深入,我並不總能確定需要上升多少層,也不知道哪些容器在那裏。 – Ernest

1
List<Control> layers = new List<Control>(); 
Control currentLayer = this.Parent; 
while (currentLayer != null) 
{ 
    layers.Add(currentLayer); 
    currentLayer = currentLayer.Parent; 
} 
+0

破碎的代碼:將添加到列表:( –

+0

@SriramSakthivel,很明顯,只是想寫這個概念;) –

相關問題