2010-11-19 6 views
0

Je souhaite récupérer les contrôles d'un formulaire. Pour ce faire:Comment faire pour récupérer le contrôle parent et ses contrôles enfants - Winforms C# 2

internal static IEnumerable<Control> EnumereTousControle(Control controleParent) 
{ 
    foreach (Control subControl in controleParent.Controls) 
    { 
     yield return subControl; 

     foreach (Control c in EnumereTousControle(subControl)) 
      yield return c; 
    } 
} 

Cela fonctionne très bien, tous les enfants du contrôle parent sont récupérés. Mais j'ai besoin que cette méthode renvoie le contrôle parent aussi. J'ai essayé ceci mais cela ne fonctionne pas (parce que la méthode est récursive):

internal static IEnumerable<Control> EnumereAllControls(Control parentControl) 
{ 
    yield return parentControl; // does not work 

    foreach (Control subControl in parentControl.Controls) 
    { 
     yield return subControl; 

     foreach (Control c in EnumereAllControls(subControl)) 
      yield return c; 
    } 
} 

Merci pour votre aide!

Répondre

3

vous THNK juste eu une ligne trop, essayez ceci:

internal static IEnumerable<Control> EnumereAllControls(Control parentControl) 
{ 
    yield return parentControl; 

    foreach (Control subControl in parentControl.Controls) 
    { 
     foreach (Control c in EnumereAllControls(subControl)) 
      yield return c; 
    } 
} 
2
internal static IEnumerable<Control> EnumereTousControle(Control controleParent) { 
     yield return controleParent; 
     foreach (Control ctl in controleParent.Controls) { 
      foreach (Control child in EnumereTousControle(ctl)) 
       yield return child; 
     } 
    } 

Eh bien, la même chose, moins le rendement supplémentaire que vous avez obtenu.

0

Vous pouvez ajouter le contrôle parent au résultat en dehors de la méthode s'il ne s'agit pas d'une contrainte.

Questions connexes