使用for循环将TextBox.Text添加到列表中

时间:2012-08-27 21:43:22

标签: c#

我试图获取文本框中的值,从0到9顺序命名,并使用for循环将其添加到List中。我遇到语法或其他问题。

这就是我现在所拥有的。

for (int i = 0; i <= amt.Count(); i++)
        {
            amt[i] = int.Parse(amtBox[i].Text);
        }

错误是amtBox在当前上下文中不存在。

我的问题是在我有amtBox [i] .Text的循环中。我已经尝试了这几种方式,VS总是抛出一个错误。我试过“amtBox”+ i并且编译但是当我尝试用它做某事并说“数据类型错误”时会导致错误。

我是C#的新手,来自PHP,所以也许这就是为什么我认为这种方法会起作用的原因。 PHP并不关心C#真正做的数据类型。我已经在PHP中完成了这个确切的事情,没有任何问题。

任何有关这种方式的建议都会受到赞赏,因为我可能会对此感到不满。

由于

3 个答案:

答案 0 :(得分:1)

我认为你的文本框被命名为“amtBox”+一个数字。 (Name属性以“amtBox1”为例)

在这种情况下,您可以使用

 Control[] t = Controls.Find("amtBox" + i, false);

代表这样的代码

for (int i = 0; i <= amt.Count(); i++)  
{  
    Control[] t = Controls.Find("amtBox" + i, false);
    if(t != null && t.Length > 0)
    {
        amt[i] = int.Parse(t[0].Text);  
    }
} 

答案 1 :(得分:1)

一种解决方案是声明一个数组并将amtBox'es分配给数组中的各个索引,然后你可以迭代该数组。

var amtBoxes = new TextBox[] { amtBox0, amtBox1, .... };
for (int i = 0; i <= amt.Count(); i++)
{
    amt[i] = int.Parse(amtBoxes[i].Text);
}

如果您最终需要在其他地方迭代TextBox控件,我会考虑让该数组成为您对象的实例成员。

答案 2 :(得分:0)

我的理解是你有一个名为amtBox1amtBox2等的文本框,你要做的是按顺序排列。正如您所指出的,这在PHP中非常容易。可以使用反射来做你所建议的事情,但这是昂贵的,无论如何,可能有更好的方法来做你正在寻找的事情。

您可以将所有金额框放入一个数组,然后您可以使用的工具:

var amtBoxes = new[] {
    amtBox1,
    amtBox2,
    amtBox3
}