Как очистить текст всех текстовых полей в форме? - PullRequest
20 голосов
/ 27 января 2011
private void CleanForm()
{
    foreach (var c in this.Controls)
    {
        if (c is TextBox)
        {
            ((TextBox)c).Text = String.Empty;
        }
    }
}

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

Есть идеи?

Ответы [ 10 ]

61 голосов
/ 27 января 2011

Мне нравится лямбда:)

 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);
 }

Удачи!

6 голосов
/ 27 января 2011

У нас была такая проблема несколько недель назад.Если вы установили точку останова и внимательно изучили 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);
    }
}
4 голосов
/ 27 января 2011
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 или Page (я предполагаю, что это и есть «this»).

4 голосов
/ 27 января 2011

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

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

3 голосов
/ 21 мая 2015

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

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();
            }
        }
    }
}
2 голосов
/ 10 июля 2011

И это для очистки всех элементов управления в форме, таких как текстовое поле, флажок, 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;
            }
        }
    }
0 голосов
/ 16 января 2019
 groupBoxName.Controls.OfType<TextBox>().ToList().ForEach(t => t.Clear());
0 голосов
/ 23 декабря 2018

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

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


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


        return base.ProcessCmdKey(ref msg, keyData);
    }
0 голосов
/ 02 декабря 2018

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

 foreach (TextBox textBox in Controls.OfType<TextBox>())
    textBox.Text = "";
0 голосов
/ 27 октября 2013

Попробуйте это:

var t = Form.Controls.OfType<TextBox>().AsEnumerable<TextBox>();
foreach (TextBox item in t)
{
    item.Text = "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...