我试图获取文本框中的值,从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中完成了这个确切的事情,没有任何问题。
任何有关这种方式的建议都会受到赞赏,因为我可能会对此感到不满。
由于
答案 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)
我的理解是你有一个名为amtBox1
,amtBox2
等的文本框,你要做的是按顺序排列。正如您所指出的,这在PHP中非常容易。可以使用反射来做你所建议的事情,但这是昂贵的,无论如何,可能有更好的方法来做你正在寻找的事情。
您可以将所有金额框放入一个数组,然后您可以使用的工具:
var amtBoxes = new[] {
amtBox1,
amtBox2,
amtBox3
}