基于变量动态访问ASP.NET控件......是否可能?

时间:2011-10-13 16:33:59

标签: c# asp.net

我的任务是重新分解Web表单项目中的一些代码,我认为可以将一段代码组合到一个单独的方法中,然后传递一个int,并根据它修改控件。这是代码:

txtline1_amnestyCheck.Text = "Y";
txtline1_range.BackColor = System.Drawing.Color.Azure;
txtline1_amnt.BackColor = System.Drawing.Color.Azure;
txtline1_minreqmet.BackColor = System.Drawing.Color.Azure;
txtline1_elizperdt.BackColor = System.Drawing.Color.Azure;
txtline1_amnestyCheck.BackColor = System.Drawing.Color.Azure;
txtline1_afterNSFamnt.BackColor = System.Drawing.Color.Azure;
txtline1_NSFamnt.BackColor = System.Drawing.Color.Azure;

有12个不同的字段,从txtline1到txtline12。我的希望是使这个方法看起来像这样:

private void ChangeTextlines(int i)
{
    txtlinei_amnestyCheck.Text = "Y";
    txtlinei_range.BackColor = System.Drawing.Color.Azure;
    txtlinei_amnt.BackColor = System.Drawing.Color.Azure;
    txtlinei_minreqmet.BackColor = System.Drawing.Color.Azure;
    txtlinei_elizperdt.BackColor = System.Drawing.Color.Azure;
    txtlinei_amnestyCheck.BackColor = System.Drawing.Color.Azure;
    txtlinei_afterNSFamnt.BackColor = System.Drawing.Color.Azure;
    txtlinei_NSFamnt.BackColor = System.Drawing.Color.Azure;
}

我将成为正在改变的行号。现在有没有办法让我能够做到这一点,还是我坚持使用96行代码为每个txtline创建一个组?

2 个答案:

答案 0 :(得分:3)

如果您知道父控件的位置,那么您可以使用FindControl方法访问每个控件。

var myControl = (ControlType)ParentControl.FindControl("txtline" + i + "_anestyCheck");

答案 1 :(得分:1)

如果您尝试将特定目标应用于特定类型的控件,则可以通过循环表单上的控件来实现此目的。这个page有一个很好的例子,说明如何从上到下循环。 e.g。

... // Control Loop (see linked site)

if (control is Label)
{
    Label label = (Label)control;
    label.BackColor = System.Drawing.Color.Azure
}

这样您就不需要通过它的名称来识别每个控件,而是需要尝试设置的控件类型。如果您知道所有控件都在您定义的面板中,那么您可以遍历该面板上的控件,查找要设置的特定类型。