Usted puede hacer un método como este:
public static Control GetControl(Control.ControlCollection controlCollection, Predicate<Control> match)
{
foreach (Control control in controlCollection)
{
if (match(control))
{
return control;
}
if (control.Controls.Count > 0)
{
Control result = GetControl(control.Controls, match);
if (result != null)
{
return result;
}
}
}
return null;
}
... que se utiliza como esto:
Control control = GetControl(this.Controls, ctl => ctl.TabIndex == 9);
Nota sin embargo, que TabIndex
es un caso complicado, ya que comienza en 0
dentro de cada contenedor, por lo que puede haber varios controles en la misma forma teniendo el mismo TabIndex
valor.
De cualquier manera, el método anterior se puede utilizar para el control de prácticamente cualquier propiedad de los controles:
Control control = GetControl(this.Controls, ctl => ctl.Text == "Some text");
me gustaría usar el método de extensión de Map de Marc para este tipo de recursión: http://stackoverflow.com/questions/141467/recursive-list-flattening/229442#229442 – Oliver