2014-01-10 2 views
1

대신자식 컨트롤의 모든 부모 컨테이너를 표시하거나 나열하는 방법이 있습니까?

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

부모 컨테이너의 모든 레이어를 나열하는 더 나은 방법이를 작성하는? 사용

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

당신이 N 번째 세대의 부모가이 순서에 ElementAt를 사용하려면 다음

+5

3 개의 변수가 동일한 개체를 가리 킵니다. 이것은 말이되지 않습니다. –

+0

캐치를 주셔서 감사합니다. 나는 그것을 고쳤습니다. – Ernest

답변

2

는 쉽게 계산하는 반복자 블록을 기록 할 수있는 모든 조상의 순서를 얻으려면 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

깨진 코드 : null을 목록에 추가합니다. ( –

+0

@SriramSakthivel, 분명히 개념을 쓰고 싶었습니다.) –

관련 문제