如何循环执行此操作。
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;
}
答案 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范例。例如,创建包含单个Label
和TextBox
的用户控件。称之为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;
}
}