si può fare un metodo come questo:
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;
}
... che viene usato in questo modo:
Control control = GetControl(this.Controls, ctl => ctl.TabIndex == 9);
Nota tuttavia che TabIndex
è un caso difficile, poiché inizia da 0
all'interno di ciascun contenitore, quindi potrebbero esserci più controlli nella stessa forma che hanno lo stessoValore.
In entrambi i casi, il metodo di cui sopra può essere utilizzato per il controllo di praticamente qualsiasi proprietà dei controlli:
Control control = GetControl(this.Controls, ctl => ctl.Text == "Some text");
fonte
2010-04-29 06:38:52
Mi piacerebbe utilizzare il metodo di estensione Map di Marc per questo tipo di ricorsione: http://stackoverflow.com/questions/141467/recursive-list-flattening/229442#229442 – Oliver