Foreach Control在表单中,如何对表单中的所有TextBox进行操作?

如何使用Foreach语句对TextBoxes执行某些操作?

foreach (Control X in this.Controls) { Check if the controls is a TextBox, if it is delete it's .Text letters. } 

您正在寻找

 foreach (Control x in this.Controls) { if (x is TextBox) { ((TextBox)x).Text = String.Empty; } } 

如果您使用的是C#3.0或更高版本,则可以执行以下操作

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

没有C#3.0,您可以执行以下操作

 foreach ( Control c in this.Controls ) { TextBox tb = c as TextBox; if ( null != tb ) { ... } } 

或者甚至更好,在C#2.0中编写OfType。

 public static IEnumerable OfType(IEnumerable e) where T : class { foreach ( object cur in e ) { T val = cur as T; if ( val != null ) { yield return val; } } } foreach ( TextBox tb in OfType(this.Controls)) { .. } 

这里的技巧是Controls不是List<>IEnumerable而是ControlCollection

我建议使用Control的扩展名,它将返回更多内容……可以;)

 public static IEnumerable All(this ControlCollection controls) { foreach (Control control in controls) { foreach (Control grandChild in control.Controls.All()) yield return grandChild; yield return control; } } 

然后你可以这样做:

 foreach(var textbox in this.Controls.All().OfType) { // Apply logic to the textbox here } 
 foreach (Control X in this.Controls) { if (X is TextBox) { (X as TextBox).Text = string.Empty; } } 

您可以执行以下操作:

 foreach (Control X in this.Controls) { TextBox tb = X as TextBox; if (tb != null) { string text = tb.Text; // Do something to text... tb.Text = string.Empty; // Clears it out... } } 

也可以使用LINQ。 例如,对于明文Textbox文本,请执行以下操作:

 this.Controls.OfType().ToList().ForEach(t => t.Text = string.Empty); 

只需添加其他控件类型:

 public static void ClearControls(Control c) { foreach (Control Ctrl in c.Controls) { //Console.WriteLine(Ctrl.GetType().ToString()); //MessageBox.Show ( (Ctrl.GetType().ToString())) ; switch (Ctrl.GetType().ToString()) { case "System.Windows.Forms.CheckBox": ((CheckBox)Ctrl).Checked = false; break; case "System.Windows.Forms.TextBox": ((TextBox)Ctrl).Text = ""; break; case "System.Windows.Forms.RichTextBox": ((RichTextBox)Ctrl).Text = ""; break; case "System.Windows.Forms.ComboBox": ((ComboBox)Ctrl).SelectedIndex = -1; ((ComboBox)Ctrl).SelectedIndex = -1; break; case "System.Windows.Forms.MaskedTextBox": ((MaskedTextBox)Ctrl).Text = ""; break; case "Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit": ((UltraMaskedEdit)Ctrl).Text = ""; break; case "Infragistics.Win.UltraWinEditors.UltraDateTimeEditor": DateTime dt = DateTime.Now; string shortDate = dt.ToShortDateString(); ((UltraDateTimeEditor)Ctrl).Text = shortDate; break; case "System.Windows.Forms.RichTextBox": ((RichTextBox)Ctrl).Text = ""; break; case " Infragistics.Win.UltraWinGrid.UltraCombo": ((UltraCombo)Ctrl).Text = ""; break; case "Infragistics.Win.UltraWinEditors.UltraCurrencyEditor": ((UltraCurrencyEditor)Ctrl).Value = 0.0m; break; default: if (Ctrl.Controls.Count > 0) ClearControls(Ctrl); break; } } } 
 foreach (Control x in this.Controls) { if (x is TextBox) { ((TextBox)x).Text = String.Empty; //instead of above line we can use *** x.resetText(); } } 

检查一下:

 foreach (Control x in this.Controls) { if (x is TextBox) { x.Text = ""; } } 

简单地使用linq,根据您认为适合您处理的任何控制进行更改。

  private void DisableButtons() { foreach (var ctl in Controls.OfType 

更好的是,您可以封装它以在一个方法中清除您想要的任何类型的控件,如下所示:

 public static void EstadoControles(object control, bool estado, bool limpiar = false) where T : Control { foreach (var textEdits in ((T)control).Controls.OfType()) textEdits.Enabled = estado; foreach (var textLookUpEdits in ((T)control).Controls.OfType()) textLookUpEdits.Enabled = estado; if (!limpiar) return; { foreach (var textEdits in ((T)control).Controls.OfType()) textEdits.Text = string.Empty; foreach (var textLookUpEdits in ((T)control).Controls.OfType()) textLookUpEdits.EditValue = @"-1"; } } 
 private IEnumerable GetTextBoxes(Control control) { if (control is TextBox textBox) { yield return textBox; } if (control.HasChildren) { foreach (Control ctr in control.Controls) { foreach (var textbox in GetTextBoxes(ctr)) { yield return textbox; } } } }