1

我正在尝试获取文本框中的值,从 0-9 依次命名,并使用 for 循环将其添加到列表中。我在语法或其他方面有问题。

这就是我现在所拥有的。

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 中做了很多次这个确切的事情,没有任何问题。

任何关于另一种方法的建议都值得赞赏,因为我可能完全错了。

谢谢

4

3 回答 3

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 控件,我会考虑将数组作为对象的实例成员。

于 2012-08-27T21:55:29.630 回答
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);  
    }
} 
于 2012-08-27T21:53:08.983 回答
0

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

您可以将所有金额框放入一个数组中,然后您所拥有的将起作用:

var amtBoxes = new[] {
    amtBox1,
    amtBox2,
    amtBox3
}
于 2012-08-27T21:54:40.147 回答