动态访问ASP.. NET控件基于变量…这是可能的

本文关键字:变量 NET ASP 访问 控件 于变量 动态 | 更新日期: 2023-09-27 18:11:15

我的任务是在一个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;
}

其中i是正在改变的行号。现在有一种方法让我能够做到这一点,还是我坚持96行代码有一个组为每个文本行?

动态访问ASP.. NET控件基于变量…这是可能的

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

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

如果您试图将共同目标应用于特定类型的控件,则可以通过循环遍历表单上的控件来实现这一点。这个页面有一个如何从上到下循环的好例子。例如

... // Control Loop (see linked site)
if (control is Label)
{
    Label label = (Label)control;
    label.BackColor = System.Drawing.Color.Azure
}

通过这种方式,您不需要通过名称来标识每个控件,而是通过您试图设置的控件类型来标识。如果你知道所有的控件都在你定义的面板中,那么你可以遍历该面板上的所有控件,寻找要设置的特定类型。