Quindi, presumibilmente si desidera ottenere tutti i controlli in qualsiasi punto del modulo, non solo controlli di livello superiore. Per questo avremo bisogno di questa funzione piccolo aiutante a portata di mano per ottenere tutti i controlli figlio, a tutti i livelli, per un particolare controllo:
public static IEnumerable<Control> GetAllControls(Control control)
{
Stack<Control> stack = new Stack<Control>();
stack.Push(control);
while (stack.Any())
{
var next = stack.Pop();
yield return next;
foreach (Control child in next.Controls)
{
stack.Push(child);
}
}
}
(Sentitevi liberi di renderlo un metodo di estensione se si pensa che ci si utilizza abbastanza)
Poi possiamo semplicemente usare OfType
su quel risultato per ottenere i controlli di tipo particolare:.
var panels = GetAllControls(this).OfType<Panel>();
ho modificato il titolo. Per favore vedi, "[Le domande dovrebbero includere" tag "nei loro titoli?] (Http://meta.stackexchange.com/questions/19190/)", dove il consenso è "no, non dovrebbero". –
Hai esaminato il ciclo [foreach] (http://msdn.microsoft.com/en-us/library/ttw7t8t6 (v = vs80) .aspx)? – Brian