Question Foreach Control in form, comment puis-je faire quelque chose pour toutes les TextBox de mon formulaire?


Comment puis-je utiliser une déclaration Foreach pour faire quelque chose à mes TextBoxes?

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

22
2017-09-30 15:55


origine


Réponses:


Vous cherchez

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

51
2017-09-30 15:59



Si vous utilisez C # 3.0 ou supérieur, vous pouvez faire ce qui suit

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

Sans C # 3.0, vous pouvez faire ce qui suit

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

Ou mieux encore, écrivez OfType dans C # 2.0.

public static IEnumerable<T> OfType<T>(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<TextBox>(this.Controls)) {
  ..
}

59
2017-09-30 15:59



L'astuce ici est que Controls n'est pas un List<> ou IEnumerable mais un ControlCollection.

Je recommande d'utiliser une extension de Control qui renverra quelque chose de plus ..

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

            yield return control;
        }
    }

Ensuite, vous pouvez faire:

foreach(var textbox in this.Controls.All().OfType<TextBox>)
{
    // Apply logic to the textbox here
}

8
2017-09-30 16:11



foreach (Control X in this.Controls)
{
  if (X is TextBox)
  {
    (X as TextBox).Text = string.Empty;
  }
}

4
2017-09-30 15:59



Vous pouvez effectuer les opérations suivantes:

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...
    }
}

3
2017-09-30 15:59



Vous pouvez aussi utiliser LINQ. Par exemple pour clear Textbox texte faire quelque chose comme:

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

3
2018-06-18 06:25



Ajoutez simplement d'autres types de contrôles:

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;

        }

    }
}

0
2017-08-14 17:16