如何通过C#中的字符串中的名称找到文本框控件?

时间:2014-05-26 05:22:40

标签: c# for-loop

请考虑以下代码段:

 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循环中完成这项工作?我当然不能想办法。感谢您的回答。

4 个答案:

答案 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行代码,处理器必须更加努力工作,以免失去一点性能,但这就是生活。