Как я могу выполнить итерации через все флажки на форме?

Brad Abrams отправил что-то связанное только несколько дней назад , http://blogs.msdn.com/brada/archive/2009/02/09/framework-design-guidelines-system-dbnull.aspx

, Таким образом, "Избегает использования Системы. DBNull. Предпочтите Nullable вместо этого".

И вот мои два цента (непротестированного кода :))

// Or if (row["fooColumn"] == DBNull.Value)
if (row.IsNull["fooColumn"])
{
   // use a null for strings and a Nullable for value types 
   // if it is a value type and null is invalid throw a 
   // InvalidOperationException here with some descriptive text. 
   // or dont check for null at all and let the cast exception below bubble  
   value = null;
}
else
{
   // do a direct cast here. dont use "as", "convert", "parse" or "tostring"
   // as all of these will swallow the case where is the incorect type.
   // (Unless it is a string in the DB and really do want to convert it)
   value = (string)row["fooColumn"];
}

И один вопрос... Какая-либо причина Вы не используете ORM?

20
задан Peter Mortensen 11 March 2013 в 12:37
поделиться

5 ответов

foreach(Control c in this.Controls)
{
   if(c is CheckBox)
   {
   // Do stuff here ;]
   }
}
37
ответ дан 29 November 2019 в 22:37
поделиться

Я использую простой метод расширения, который будет работать для любого типа управления:

  public static IEnumerable<T> AllControls<T>(this Control startingPoint) where T : Control
  {
     bool hit = startingPoint is T;
     if (hit)
     {
        yield return startingPoint as T;
     }
     foreach (var child in startingPoint.Controls.Cast<Control>())
     {
        foreach (var item in AllControls<T>(child))
        {
           yield return item;
        }
     }
  }

Затем , вы можете использовать его так:

var checkboxes = control.AllControls<CheckBox>();

Использование IEnumerable позволяет вам выбирать, как сохранять результаты, а также позволяет использовать linq:

var checkedBoxes = control.AllControls<CheckBox>().Where(c => c.Checked);
18
ответ дан 29 November 2019 в 22:37
поделиться

Может быть, вот так (если он в Windows Forms ):

foreach(var checkBox in myForm.Controls.OfType<CheckBox>())
{   
   //Do something.
}
8
ответ дан 29 November 2019 в 22:37
поделиться

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

1
ответ дан 29 November 2019 в 22:37
поделиться

Если это Windows Forms , вы можете попробовать что-то вроде этого:

private void button1_Click(object sender, EventArgs e)
{
    Dictionary<string, bool> checkBoxes = new Dictionary<string, bool>();
    LoopControls(checkBoxes, this.Controls);
}

private void LoopControls(Dictionary<string, bool> checkBoxes, Control.ControlCollection controls)
{
    foreach (Control control in controls)
    {
        if (control is CheckBox)
            checkBoxes.Add(control.Name, ((CheckBox) control).Checked);
        if (control.Controls.Count > 0)
            LoopControls(checkBoxes, control.Controls);
    }
}

Помните, что элементы управления контейнера могут содержать дочерние элементы, поэтому вы можете захотеть проверить и их.

11
ответ дан 29 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

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