Подтвердить что ты не робот

Как очистить текст всех текстовых полей в форме?

private void CleanForm()
{
    foreach (var c in this.Controls)
    {
        if (c is TextBox)
        {
            ((TextBox)c).Text = String.Empty;
        }
    }
}

Этот метод выше не работает, и элементы управления не очищаются. Он компилируется отлично, но ничего не делает.

Любые идеи?

4b9b3361

Ответ 1

Мне нравится lambda:)

 private void ClearTextBoxes()
 {
     Action<Control.ControlCollection> func = null;

     func = (controls) =>
         {
             foreach (Control control in controls)
                 if (control is TextBox)
                     (control as TextBox).Clear();
                 else
                     func(control.Controls);
         };

     func(Controls);
 }

Удачи!

Ответ 2

У нас была проблема вроде этого несколько недель назад. Если вы установите точку останова и внимательно рассмотрите this.Controls, проблема покажет ее природу: вы должны пройти через все дочерние элементы управления.

Код может выглядеть так:

private void CleanForm()
{
    traverseControlsAndSetTextEmpty(this);
}
private void traverseControlsAndSetTextEmpty(Control control)
{

    foreach(var c in control.Controls)
    {
        if (c is TextBox) ((TextBox)c).Text = String.Empty;
        traverseControlsAndSetTextEmpty(c);
    }
}

Ответ 3

Ваши текстовые поля, вероятно, находятся внутри панелей или других контейнеров, а не непосредственно внутри формы.

Вам необходимо рекурсивно пройти коллекцию Controls каждого дочернего элемента управления.

Ответ 4

private void CleanForm(Control ctrl)
{
    foreach (var c in ctrl.Controls)
    {
        if (c is TextBox)
        {
            ((TextBox)c).Text = String.Empty;
        }

        if( c.Controls.Count > 0)
        {
           CleanForm(c);
        }
    }
}

Когда вы изначально вызываете ClearForm, передайте это или страницу (я предполагаю, что это то, что 'this').

Ответ 5

Я улучшил/исправил свой метод расширения.

public  static class ControlsExtensions
{
    public static void ClearControls(this Control frm)
    {
        foreach (Control control in frm.Controls)
        {
            if (control is TextBox)
            {
                control.ResetText();
            }

            if (control.Controls.Count > 0)
            {
                control.ClearControls();
            }
        }
    }
}

Ответ 6

И это для очистки всех элементов управления в виде текстового поля, флажка, radioButton

вы можете добавить различные типы, которые вы хотите.

private void ClearTextBoxes(Control control)
    {
        foreach (Control c in control.Controls)
        {
            if (c is TextBox)
            {
                ((TextBox)c).Clear();
            }

            if (c.HasChildren)
            {
                ClearTextBoxes(c);
            }


            if (c is CheckBox)
            {

                ((CheckBox)c).Checked = false;
            }

            if (c is RadioButton)
            {
                ((RadioButton)c).Checked = false;
            }
        }
    }

Ответ 7

Попробуйте следующее:

var t = Form.Controls.OfType<TextBox>().AsEnumerable<TextBox>();
foreach (TextBox item in t)
{
    item.Text = "";
}

Ответ 8

Возможно, вам нужен более простой и короткий подход. Это также очистит все текстовые поля. (За исключением текстовых полей внутри Panel или GroupBox).

 foreach (TextBox textBox in Controls.OfType<TextBox>())
    textBox.Text = "";

Ответ 9

Вы можете попробовать этот код

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {


        if(keyData==Keys.C)
        {
            RefreshControl();
            return true;
        }


        return base.ProcessCmdKey(ref msg, keyData);
    }

Ответ 10

 groupBoxName.Controls.OfType<TextBox>().ToList().ForEach(t => t.Clear());

Ответ 11

Просто используйте

private void button2_Click(object sender, EventArgs e)
    {

        textBox1.Text = "";
    }