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

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

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

Есть идеи?

Мне нравится lambda 🙂

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

Удачи!

У нас была такая проблема несколько недель назад. Если вы установили this.Controls останова и внимательно 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); } } 

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

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

 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, переходите к этому или к странице (я предполагаю, что это «это»).

И это для очистки всех элементов управления в виде текстового поля, флажка, 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; } } } 

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

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

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

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

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

 private void button2_Click(object sender, EventArgs e) { textBox1.Text = ""; } 
  • Событие, зарегистрированное в CheckedListBox?
  • Загружать шрифты из файла в приложении C #
  • Каков «правильный» способ принести приложение Windows Forms на передний план?
  • Проверка ввода / ввода данных .NET. Контроль состояния OK или NOK
  • Как добавить событие в UserControl в C #?
  • Передача переменной между winforms
  • Форма неправильной формы Windows (C #)
  • Является ли размер формы в дизайнере Visual Studio ограниченным разрешением экрана?
  • Приложение C # как GUI, так и командная строка
  • Отображение всплывающей подсказки по кнопке с помощью Windows Forms
  • Захват событий мыши из каждого компонента на C # WInForm
  • Давайте будем гением компьютера.