动态访问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行代码有一个组为每个文本行?
如果你知道父控件的位置,那么你可以使用它的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
}
通过这种方式,您不需要通过名称来标识每个控件,而是通过您试图设置的控件类型来标识。如果你知道所有的控件都在你定义的面板中,那么你可以遍历该面板上的所有控件,寻找要设置的特定类型。