如何循环一些ASP.NET标签来设置它们的属性?

时间:2010-05-26 18:56:45

标签: c# asp.net controls

如何循环执行此操作。

protected void ddlTool_SelectedIndexChanged(object sender, EventArgs e)
{

    lblTool1.Visible = false;
    txtTool1.Visible = false;
    lblTool2.Visible = false;
    txtTool2.Visible = false;
    lblTool3.Visible = false;
    txtTool3.Visible = false;
    lblTool4.Visible = false;
    txtTool4.Visible = false;
    lblTool5.Visible = false;


    if (ddlTool.SelectedValue == "1")
    {
        lblTool1.Visible = true;
        txtTool1.Visible = true;
    }
    if (ddlTool.SelectedValue == "2")
    {
        lblTool1.Visible = true;
        txtTool1.Visible = true;
        lblTool2.Visible = true;
        txtTool2.Visible = true;
    }
    if (ddlTool.SelectedValue == "3")
    {
        lblTool1.Visible = true;
        txtTool1.Visible = true;
        lblTool2.Visible = true;
        txtTool2.Visible = true;
        lblTool3.Visible = true;
        txtTool3.Visible = true;
    }
    if (ddlTool.SelectedValue == "4")
    {
        lblTool1.Visible = true;
        txtTool1.Visible = true;
        lblTool2.Visible = true;
        txtTool2.Visible = true;
        lblTool3.Visible = true;
        txtTool3.Visible = true;
        lblTool4.Visible = true;
        txtTool4.Visible = true;
    }

5 个答案:

答案 0 :(得分:7)

不是为每个文本框和标签设置单独的变量,而是拥有它们的集合 - 无论是List<T>还是数组或其他。

然后你可以这样做:

// Potentially use int.TryParse here instead
int visibleLabels = int.Parse(ddlTool.SelectedValue);
for (int i = 0; i < labels.Count; i++)
{
    labels[i].Visible = (i < visibleLabels);
    textBoxes[i].Visible = (i < visibleLabels);
}

(或者使用两个循环,一个将一些Visible属性设置为true,另一个将some设置为false。)

答案 1 :(得分:2)

您可以使用

按名称访问控件
container.Controls["nameofcontrol"]

从技术上讲,您可以使用它来查找控件

(未经测试的代码)

for(int index = 1; index <= Convert.ToInt32(ddlTool.SelectedValue); index++)
{
    this.Controls["lblTool" + index.ToString()].Visible = true;
    this.Controls["txtTool" + index.ToString()].Visible = true;
}

答案 2 :(得分:1)

对每组连接的控件使用UserControl,然后启用/禁用UserControl而不是所有组件控件。这是用户界面的经典,基本模块化。

请注意,这仍然需要一些“冗余”代码,因为您通过启用ddlTool选定的控件值来处理不寻常的UI范例。例如,创建包含单个LabelTextBox的用户控件。称之为LabeledTextBox或类似的东西。然后,您可以创建标记文本框的集合,并将其启用到int.Parse(ddlTool.SelectedValue) - 1

答案 3 :(得分:0)

foreach (Control ctrl in this.Controls)
{
    int index = (int)ctrl.Name.Substring(ctrl.Name.Length - 1);
    int maxIndex = (int)ddlTool.SelectedValue;
    ctrl.Visible = (index <= maxIndex);
}

答案 4 :(得分:0)

这是一个没有错误检查的示例,但应该与您的代码功能相匹配。

protected void ddlTool_SelectedIndexChanged(object sender, EventArgs e) 
{
  int selectedValue = int.Parse(ddlTool.SelectedValue.ToString());
  for (int i = 1; i <= 4; ++i)
  {
    bool state = i <= selectedValue;
    this.Controls["lblTool" + i.ToString()].Visible = state;
    this.Controls["txtTool" + i.ToString()].Visible = state;
  }
}