Если вы хотите только непосредственные дети, используйте
...
var children = control.Controls.OfType<Control>();
...
Если вы хотите, чтобы все элементы управления из иерархии (то есть, все в дереве под определенным контролем), используйте:
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);
}
Затем, вы можете использовать что-то подобное в виде:
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
}
}
Обратите внимание, что .ToList()
немедленно оценит весь Перечислимый, что избавит вас от любых преимуществ, которые вы могли бы получить от реализации сопрограммы.
Ваш вопрос неясно. Как вы хотите «получить» эти элементы управления, понимая, как вы уже знаете, как их перебирать? –
Вы уже итерируете детей с помощью петли foreach. По крайней мере, дети этого. Контролирует, по-видимому, форму. Не совсем ясно, что вы имеете в виду под «родительским контролем». –