Если вы не хотите ставить рекурсивный , вы можете попробовать BFS (поиск в ширину);давайте реализуем его как метод расширения :
public static class ControlExtensions {
public static IEnumerable<Control> RecoursiveControls(this Control parent) {
if (null == parent)
throw new ArgumentNullException(nameof(parent));
Queue<Control> agenda = new Queue<Control>(parent.Controls.OfType<Control>());
while (agenda.Any()) {
yield return agenda.Peek();
foreach (var item in agenda.Dequeue().Controls.OfType<Control>())
agenda.Enqueue(item);
}
}
}
Тогда вы можете использовать его как
// Let's find Button "MyButton1" somewhere on MyForm
// (not necessary directly, but may be on some container)
Button myBytton = MyForm
.RecoursiveControls()
.OfType<Button>()
.FirstOrDefault(btn => btn.Name == "MyButton1");