我的任务是重新分解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创建一个组?
答案 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
}
这样您就不需要通过它的名称来识别每个控件,而是需要尝试设置的控件类型。如果您知道所有控件都在您定义的面板中,那么您可以遍历该面板上的控件,查找要设置的特定类型。