循环选中复选框,文本框和标签

时间:2013-03-15 10:09:43

标签: c# foreach

基本上我正试图将下面的代码变成循环。每当我尝试迭代控件时,我似乎遇到了某种死胡同,无法弄清楚如何更新相关标签或检查相关文本框。

if (checkBox1.Checked && !string.IsNullOrEmpty(textBox1.Text))
{
    if (RemoteFileExists(textBox1.Text) == true)
    {
        label1.Text = "UP";
    }
    else
    {
        label1.Text = "DOWN";
    }
}

if (checkBox2.Checked && !string.IsNullOrEmpty(textBox2.Text))
{
    if (RemoteFileExists(textBox2.Text) == true)
    {
        label2.Text = "UP";
    }
    else
    {
        label2.Text = "DOWN";
    }
}

if (checkBox3.Checked && !string.IsNullOrEmpty(textBox3.Text))
{
    if (RemoteFileExists(textBox3.Text) == true)
    {
        label3.Text = "UP";
    }
    else
    {
        label3.Text = "DOWN";
    }
}

2 个答案:

答案 0 :(得分:2)

您可以使用Form.Controls来迭代页面上的所有控件,例如:

foreach(Control control in Controls) {
   if (control is Checkbox) {
       ...
   } else if (control is TextBox) {
       ...
   } else {
       ...
   }
}

但是,这将执行所有控件,因此可能效率不高。您可以使用Tag控件和LINQ扩展来改进它,例如:

IEnumerable<Checkbox> needed_checkboxes = Controls.Where(control => control is Checkbox && control.Tag == someValue);

答案 1 :(得分:0)

您可以通过动态查找控件来使用它:

for (int i = 1; i < count; i++)
            {
                CheckBox chbx = (CheckBox) this.FindControl("checkBox" + i);
                TextBox txtb = (TextBox)this.FindControl("textBox" + i);
                Label lbl = (Label) this.FindControl("label" + i);
                if (chbx.Checked && !string.IsNullOrEmpty(txtb.Text))
                {
                    if (RemoteFileExists(txtb.Text) == true)
                    {
                        lbl.Text = "UP";
                    }
                    else
                    {
                        lbl.Text = "DOWN";
                    }
                }
            }