Как изменить все элементы на форме с черным цветом назад на белый [дубликат]

Запуск Visual Studio в качестве администратора работал для меня.

22
задан Nathan Koop 30 September 2009 в 17:00
поделиться

12 ответов

Вы ищете

foreach (Control x in this.Controls)
{
  if (x is TextBox)
  {
    ((TextBox)x).Text = String.Empty;
  }
}
52
ответ дан JustLoren 19 August 2018 в 02:44
поделиться

Также вы можете использовать LINQ. Например, для прозрачного текста Textbox сделайте что-то вроде:

this.Controls.OfType<TextBox>().ToList().ForEach(t => t.Text = string.Empty);
3
ответ дан combo_ci 19 August 2018 в 02:44
поделиться

просто используя linq, измените, как вы считаете нужным для любого управления, с которым имеете дело.

        private void DisableButtons()
    {
        foreach (var ctl in Controls.OfType<Button>())
        {
            ctl.Enabled = false;
        }
    }

    private void EnableButtons()
    {
        foreach (var ctl in Controls.OfType<Button>())
        {
            ctl.Enabled = true;
        }
    }
0
ответ дан DirtyHowi 19 August 2018 в 02:44
поделиться

Еще лучше, вы можете инкапсулировать это, чтобы очистить любые типы элементов управления, которые вы хотите в одном методе, например:

public static void EstadoControles<T>(object control, bool estado, bool limpiar = false) where T : Control
        {
            foreach (var textEdits in ((T)control).Controls.OfType<TextEdit>()) textEdits.Enabled = estado;
            foreach (var textLookUpEdits in ((T)control).Controls.OfType<LookUpEdit>()) textLookUpEdits.Enabled = estado;

            if (!limpiar) return;
            {
                foreach (var textEdits in ((T)control).Controls.OfType<TextEdit>()) textEdits.Text = string.Empty;
                foreach (var textLookUpEdits in ((T)control).Controls.OfType<LookUpEdit>()) textLookUpEdits.EditValue = @"-1";
            }
        }
0
ответ дан Eduardo Quiroz Cosme 19 August 2018 в 02:44
поделиться
private IEnumerable<TextBox> 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;
            }
        }
    }
}
0
ответ дан Henry 19 August 2018 в 02:44
поделиться
foreach (Control X in this.Controls)
{
  if (X is TextBox)
  {
    (X as TextBox).Text = string.Empty;
  }
}
4
ответ дан Ian Kemp 19 August 2018 в 02:44
поделиться

Если вы используете C # 3.0 или выше, вы можете сделать следующее

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

Без C # 3.0 вы можете сделать следующее

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

Или даже лучше, напишите OfType в 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
ответ дан JaredPar 19 August 2018 в 02:44
поделиться
  • 1
    обратите внимание на тех, кто будет показывать это в Google: если у вас есть панель под вашими элементами управления, вам необходимо указать ее: this.myPanel.Controls.OfType & lt; ComboBox & gt; (), вы также можете использовать этот.myPanel.Controls.OfType & lt; ComboBox & gt; (). Где (x = & gt; x.Name.StartsWith ("specificName")), если вам нужно выбрать комбобокс с определенным именем. – Rose 25 November 2017 в 06:12
  • 2
    Я предполагаю, что this - это форма и код работает в той же форме. Что делать, если я хочу прочитать все формы в сборке Assembly.GetExecutingAssembly().GetTypes(), а затем получить доступ к control s в нем во время выполнения, чтобы изменить какое-либо свойство? – AaA 16 January 2018 в 05:17

Трюк здесь в том, что Controls не является List<> или IEnumerable, а ControlCollection.

Я рекомендую использовать расширение Control, которое вернет что-то большее. )

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

Тогда вы можете сделать:

foreach(var textbox in this.Controls.All().OfType<TextBox>)
{
    // Apply logic to the textbox here
}
8
ответ дан Mathlec 19 August 2018 в 02:44
поделиться

Проверьте это:

foreach (Control x in this.Controls)
{
    if (x is TextBox)
    {
        x.Text = "";
    }
}
0
ответ дан Prasad Jadhav 19 August 2018 в 02:44
поделиться

Вы можете сделать следующее:

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
ответ дан Reed Copsey 19 August 2018 в 02:44
поделиться
foreach (Control x in this.Controls)
{
  if (x is TextBox)
  {
    ((TextBox)x).Text = String.Empty;
//instead of above line we can use 
     ***  x.resetText();
  }
}
0
ответ дан sandy 19 August 2018 в 02:44
поделиться

Просто добавьте другие типы управления:

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
ответ дан sth 19 August 2018 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: