Si sólo desea los hijos inmediatos, utilice
...
var children = control.Controls.OfType<Control>();
...
Si desea que todos los controles de la jerarquía (es decir, todo en el árbol bajo un cierto control), utilice:
private IEnumerable<Control> GetControlHierarchy(Control root)
{
var queue = new Queue<Control>();
queue.Enqueue(root);
do
{
var control = queue.Dequeue();
yield return control;
foreach (var child in control.Controls.OfType<Control>())
queue.Enqueue(child);
} while (queue.Count > 0);
}
a continuación, se usa algo como esto en una forma:
private void button1_Click(object sender, EventArgs e)
{
/// get all of the controls in the form's hierarchy in a List<>
var controlList = GetControlHierarchy(this).ToList();
foreach (var control in controlList)
{
/// do something with this control
}
}
Tenga en cuenta que .ToList()
evaluará todo el Enumerable inmediatamente, lo que elimina cualquier beneficio de rendimiento que pueda obtener de la implementación de coroutine.
Su pregunta no está claro ¿Cómo desea 'obtener' esos controles, dado que ya sabe cómo iterar a través de ellos? –
Ya está iterando a los niños con el ciclo foreach. Al menos los hijos de esto. Controles, presumiblemente la forma. No está claro a qué se refiere con "control de padres". –