Чтобы упростить это, вы можете написать небольшую вспомогательную функцию, например:
public static IEnumerable<Control> AllControls(Control parent)
{
if (parent == null)
throw new ArgumentNullException();
return implementation();
IEnumerable<Control> implementation()
{
foreach (Control control in parent.Controls)
{
foreach (Control child in AllControls(control))
{
yield return child;
}
yield return control;
}
}
}
И тогда вы можете найти все элементы управления определенного типа, например, так:
var allToolstripButtons = AllControls(parent).OfType<ToolStripButton>();
Это рекурсивное решение, которое найдет все дочерние элементы управления независимо от того, насколько глубоко они вложены в структуру элемента управления - если вам нужно только найти ToolStripButton
элементов, которые являются непосредственными потомками данного родителя, вы можете просто использовать @ Простой ответ Филбурта.
(Примечание: причина любопытной встроенной функции implementation()
состоит в том, чтобы убедиться, что аргумент parent
проверен на нулевое значение до того, как будет оценен результат Enumerable
.)