Также обязательно верните с ожидаемым возвращаемым значением. Если вы используете exit, когда будете сталкиваться с выходом, он выйдет из вашей базовой оболочки, так как источник не создает другой процесс (экземпляр).
Вам нужен рекурсивный поиск вашего контроля внутри всех элементов управления формы. Посмотрите , который принял ответ , который реализует очень хороший рекурсивный подход.
Делая это:
frm.Controls.OfType<Button>()
вы ищете только в первом слое элементов управления ваших форм, так что если у вас есть кнопка внутри панели или другого элемента (99,999999% ситуаций ) ваш foreach не может его найти.
Принятие принятого ответа на ваш вопрос:
public IEnumerable<Control> GetAll(this Control control,Type type)
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => ctrl.GetAll(type))
.Concat(controls)
.Where(c => c.GetType() == type);
}
[...]
foreach (Button btn in frm.GetAll(typeof(Button)))
{
btn.BackColor = btnColor;
}
L-