Никто не упомянул Умный:: Комментарии ? Это не всегда, что Вы хотите, но хороший при необходимости в большем количестве питания к комментариям.
Простейшим вариантом может быть каскадирование:
public static void SetEnabled(Control control, bool enabled) {
control.Enabled = enabled;
foreach(Control child in control.Controls) {
SetEnabled(child, enabled);
}
}
или аналогичное; вы, конечно, можете передать делегата, чтобы сделать его достаточно универсальным:
public static void ApplyAll(Control control, Action<Control> action) {
action(control);
foreach(Control child in control.Controls) {
ApplyAll(child, action);
}
}
затем такие вещи, как:
ApplyAll(this, c => c.Validate());
ApplyAll(this, c => {c.Enabled = false; });
Также попробуйте:
public List<Control> getControls(string what, Control where)
{
List<Control> controles = new List<Control>();
foreach (Control c in where.Controls)
{
if (c.GetType().Name == what)
{
controles.Add(c);
}
else if (c.Controls.Count > 0)
{
controles.AddRange(getControls(what, c));
}
}
return controles;
}
private void Form1_Load(object sender, EventArgs e)
{
var c = getControls("Button", this);
}