2010-03-26 5 views
4

Iam utilisant des formulaires Windows. Comment puis-je interroger récursivement tous les contrôles enfants d'un formulaire ayant un certain type?Comment interroger récursivement tous les contrôles enfants d'un Winform?

En SQL, vous utiliseriez un selfjoin pour effectuer cela.

var result = 
    from this 
    join this ???? 
    where ctrl is TextBox || ctrl is Checkbox 
    select ctrl; 

Puis-je également le faire dans LINQ?

EDIT:

LINQ prend en charge les jointures. Pourquoi ne puis-je pas utiliser une sorte de selfjoin?

Répondre

3

Quelque chose comme cela devrait fonctionner (pas de code parfait par tout moyen .. (juste pour signifier l'idée):

public IEnumerable<Control> GetSelfAndChildrenRecursive(Control parent) 
{ 
    List<Control> controls = new List<Control>(); 

    foreach(Control child in parent.Controls) 
    { 
     controls.AddRange(GetSelfAndChildrenRecursive(child)); 
    } 

    controls.Add(parent); 

    return controls; 
} 

var result = GetSelfAndChildren(topLevelControl) 
    .Where(c => c is TextBox || c is Checkbox); 
+0

La signature renvoie IEnumerable mais en réalité vous renvoyez une liste. Considérez le rendement de rendement pour le report. – as9876

Questions connexes