Надо заходить внутрь же. Вот простейший вариант модификации вашего кода:
foreach (Control c in Controls)
{
if (c.GetType() == typeof (GroupBox))
foreach (Control d in c.Controls)
if (d.GetType() == typeof(TextBox))
d.Text = string.Empty;
if (c.GetType() == typeof(TextBox))
c.Text = string.Empty;
}
А вот как (примерно, на самом деле я бы сделал extension method) бы сделал я:
private static void CleanAllTextBoxesIn(Control parent)
{
foreach (Control c in parent.Controls)
{
if (c.GetType() == typeof(TextBox))
c.Text = string.Empty;
if (c.GetType() == typeof (GroupBox))
CleanAllTextBoxesIn(c);
}
}
private void CleanAllTextBoxesButton_Click(object sender, EventArgs e)
{
CleanAllTextBoxesIn(this);
}