Chvalov
@Chvalov

C# WinForm как очистить все TextBox-ы на форме ?

Здравствуйте, подскажите как очистить все TextBoх-ы на форме если некоторые из них находятся на GroupBox-ах
Пробовал это
foreach(Control c in Controls)
    if(c is TextBox)
        ((TextBox)c).Text = null;
И это
foreach (Control c in this.Controls)
            {
                if (c.GetType() == typeof(TextBox))
                    c.Text = string.Empty;
            }
Но чистит только те текстовые поля которые находятся просто на форме, а не на GroupBox-ах
  • Вопрос задан
  • 11694 просмотра
Решения вопроса 1
StrangeAttractor
@StrangeAttractor
Надо заходить внутрь же. Вот простейший вариант модификации вашего кода:

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);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Espleth
Может я ошибаюсь, но Controls - это ведь все поле целиком?
Не пользовался GroupBox, но подозреваю, что надо что-то типа
foreach (Control c in groupBox) {...}
или, может фигню скажу, но так:
if (c is TextBox && c in groupBox)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы