Jeśli chcesz tylko natychmiastowe dzieci, należy
...
var children = control.Controls.OfType<Control>();
...
Jeśli chcesz wszystkie kontrolki od hierarchii (czyli wszystko w drzewie pod pewną kontrolą), użyj:
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);
}
następnie można użyć coś takiego w postaci:
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
}
}
Zauważ, że .ToList()
natychmiast oceni całą Enumerable, co eliminuje wszelkie korzyści, jakie można uzyskać dzięki implementacji coroutine.
swoje pytanie nie jest jasne. Jak chcesz "uzyskać" te kontrolki, widząc jak już wiesz, jak je przeglądać? –
Jesteś już iterowanie dzieci z pętli foreach. Przynajmniej dzieci tego. Kontrolują, prawdopodobnie formę. W inny sposób nie jest jasne, co masz na myśli mówiąc "kontrola rodzicielska". –