请考虑以下代码段:
protected void displayGannt()
{
TextBoxT0.BackColor = getColour(time.moments[0]);
TextBoxT1.BackColor = getColour(time.moments[1]);
TextBoxT2.BackColor = getColour(time.moments[2]);
TextBoxT3.BackColor = getColour(time.moments[3]);
TextBoxT4.BackColor = getColour(time.moments[4]);
TextBoxT5.BackColor = getColour(time.moments[5]);
TextBoxT6.BackColor = getColour(time.moments[6]);
是否有任何可想到的方法将这段代码放入带有计数器的for循环中,而不必写出一百万行代码?是否有任何c#宏可以在某种for循环中完成这项工作?我当然不能想办法。感谢您的回答。
答案 0 :(得分:5)
var i = 0;
foreach(var txt in this.Controls.OfType<TextBox>().OrderBy(t => t.Id))
{
txt.BackColor = getColour(time.moments[i]);
i++;
}
试试上面的
答案 1 :(得分:1)
一个简单的解决方案是引用数组中的文本框(在类级别或方法内),并枚举该数组:
protected void displayGannt()
{
var textboxes = new[] {TextBoxT0, TextBoxT1, TextboxT2, TextboxT3, TextboxT4, TextboxT5, TextboxT6};
for (int i = 0; i < textboxes.Length; i++)
textboxes[i].BackColor = getColour(time.moments[i]);
}
答案 2 :(得分:0)
您可以使用.FindControl(String id)
获取您所追求的控件(如果是网络)。
for(inti i = 0; i < 7; i++)
{
Control c = parentControl.Find("TextBoxT" + i);
if(c != null)
{
c.BackColor = getColour(time.moments[i]);
}
}
答案 3 :(得分:0)
for (int i = 0; i < 111; i++)
{
string currentbox = "TextBoxT" + i.ToString();
TextBox currentTextBox = (TextBox)this.FindControl(currentbox);
currentTextBox.BackColor = getColour(time.moments[i]);
}
111行代码现在变成5行代码,处理器必须更加努力工作,以免失去一点性能,但这就是生活。