重置表单中的所有项目

我想知道,有没有办法可以将所有复选框,文本框,数字和其他控件重置为默认值,而无需单独为每个控件编写代码? 这是我尝试过的代码,但似乎不起作用:

for (int i = 0; i < this.Controls.Count; i++) { this.Controls[i].ResetText(); } 

编辑:
我通过手动设置控制值来修复它,抱歉所有麻烦>。<。

如下所示创建类并像这样调用它

检查: 使用C#重置Windows窗体中的所有控件(Textbox,ComboBox,CheckBox,ListBox)

 private void button1_Click(object sender, EventArgs e) { Utilities.ResetAllControls(this); } 

 public class Utilities { public static void ResetAllControls(Control form) { foreach (Control control in form.Controls) { if (control is TextBox) { TextBox textBox = (TextBox)control; textBox.Text = null; } if (control is ComboBox) { ComboBox comboBox = (ComboBox)control; if (comboBox.Items.Count > 0) comboBox.SelectedIndex = 0; } if (control is CheckBox) { CheckBox checkBox = (CheckBox)control; checkBox.Checked = false; } if (control is ListBox) { ListBox listBox = (ListBox)control; listBox.ClearSelected(); } } } } 

您可以再次创建表单并处理旧表单。

 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnReset_Click(object sender, EventArgs e) { Form1 NewForm = new Form1(); NewForm.Show(); this.Dispose(false); } } 
 foreach (Control field in container.Controls) { if (field is TextBox) ((TextBox)field).Clear(); else if (field is ComboBox) ((ComboBox)field).SelectedIndex=0; else dgView.DataSource = null; ClearAllText(field); } 

其他 – >清除子控件下面的函数也会清除嵌套(子)控件,包含在类中。

  public static void ClearControl(Control control) { if (control is TextBox) { TextBox txtbox = (TextBox)control; txtbox.Text = string.Empty; } else if (control is CheckBox) { CheckBox chkbox = (CheckBox)control; chkbox.Checked = false; } else if (control is RadioButton) { RadioButton rdbtn = (RadioButton)control; rdbtn.Checked = false; } else if (control is DateTimePicker) { DateTimePicker dtp = (DateTimePicker)control; dtp.Value = DateTime.Now; } else if (control is ComboBox) { ComboBox cmb = (ComboBox)control; if (cmb.DataSource != null) { cmb.SelectedItem = string.Empty; cmb.SelectedValue = 0; } } ClearErrors(control); // repeat for combobox, listbox, checkbox and any other controls you want to clear if (control.HasChildren) { foreach (Control child in control.Controls) { ClearControl(child); } } } 

您可以重置某种类型的所有控件。 就像是

 foreach(TextBox tb in this.Controls.OfType().ToArray()) { tb.Clear(); } 

但是您无法一次重置所有控件

快速回答,也许它会有所帮助:

 private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.ShowDialog(); while (f2.DialogResult == DialogResult.Retry) { f2 = new Form2(); f2.ShowDialog(); } } 

并在Form2(’设置’表单):

 private void button1_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void button2_Click(object sender, EventArgs e) { DialogResult = DialogResult.Retry; Close(); } 

我最近不得不为Textboxes和Checkboxes做这个,但使用JavaScript …

如何重置ASP.net文档中的文本框和复选框控件

这是代码……

   

并用按钮或任何其他方法调用它...

  

如果您不在网站上使用ValidationControls,只需删除上面引用的所有代码和调用Page_ClientValidateReset();

我相信你可以使用DOM扩展它以进行任何其他控制。 由于服务器上没有post,因此速度更快,也没有“闪烁”。

  function setToggleInputsinPnl(pnlName) { var domCount = pnlName.length; for (var i = 0; i < domCount; i++) { if (pnlName[i].type == 'text') { pnlName[i].value = ''; } else if (pnlName[i].type == 'select-one') { pnlName[i].value = ''; } } } 

如果您有一些面板或组框,则重置字段应该是递归的。

 public class Utilities { public static void ResetAllControls(Control form) { foreach (Control control in form.Controls) { RecursiveResetForm(control); } } private void RecursiveResetForm(Control control) { if (control.HasChildren) { foreach (Control subControl in control.Controls) { RecursiveResetForm(subControl); } } switch (control.GetType().Name) { case "TextBox": TextBox textBox = (TextBox)control; textBox.Text = null; break; case "ComboBox": ComboBox comboBox = (ComboBox)control; if (comboBox.Items.Count > 0) comboBox.SelectedIndex = 0; break; case "CheckBox": CheckBox checkBox = (CheckBox)control; checkBox.Checked = false; break; case "ListBox": ListBox listBox = (ListBox)control; listBox.ClearSelected(); break; case "NumericUpDown": NumericUpDown numericUpDown = (NumericUpDown)control; numericUpDown.Value = 0; break; } } }