将文本框设置为TextBox []数组

时间:2009-11-19 11:41:14

标签: c# arrays textbox

我正在尝试创建一个循环以避免复制粘贴这些行30次。

名称是:

  • sum1 to sum30
  • br1txt1到br30txt1
  • br1txt2到br30txt2

//decimal sum30 = decimal.Parse(br30txt1.Text) + decimal.Parse(br30txt2.Text);
//sumTxt30.Text = sum30.ToString();  

但我得到的错误是文本框数组似乎试图将文本框的值而不是文本框refrenc自己放入数组中,我该如何解决这个问题呢?

private void sumX()
    {
        TextBox[] sumTextboxNames;

        sumTextboxNames = new TextBox[29];

        for (int i = 1; i < 31; i++)
        {
            if (sumTextboxNames[0] == null)
            {
                int y = 0;
                foreach (Control c in this.Controls)
                {
                    if (c is TextBox && c.Name.StartsWith("sum"))
                    {
                        sumTextboxNames[y] = (TextBox)c;
                        y++;
                    }
                }
            }
            else
            {

            }
            string1 = "br" + i + "txt" + 1 + ".Text";
            string2 = "br" + i + "txt" + 2 + ".Text";
            string3 = "sumTxt" + i + ".Text";
            sum = decimal.Parse(string1) + decimal.Parse(string2);
            int x = i - 1;
            sumTextboxNames[x].Text = sum.ToString();  
        }  
   }

3 个答案:

答案 0 :(得分:4)

以下几行根本不起作用:

string1 = "br" + i + "txt" + 1 + ".Text";
string2 = "br" + i + "txt" + 2 + ".Text";

由于12不是字符串,因此无法连接到字符串。这应该立即给出编译器错误。

在下一行中,您尝试将文本框的名称添加为数字 - 不起作用,名称包含非数字字符。

sum = decimal.Parse(string1) + decimal.Parse(string2);

无论如何,您根本不需要使用TextBox数组。你能做的是:

for (int i = 1; i <= 30; i++)
{

    TextBox s = (TextBox)this.Controls[<Name for the S-Textbox>];
    TextBox b1 = (TextBox)this.Controls[<Name for the first sum textbox>];
    TextBox b2 = (TextBox)this.Controls[<Name for the second sum textbox>];

    s.Text = Decimal.Parse(b1.Text) + Decimal.Parse(b2.Text);
}

修改
抱歉,从OP的源代码中引用了错误的行。

编辑2
忘记施放到TextBox - 这当然是必需的...感谢你指出它,每个人。

答案 1 :(得分:1)

Thorsten Dittmar的答案就是你应该去的方式。

但是,就此代码而言:

foreach (Control c in this.Controls)
{
    if (c is TextBox && c.Name.StartsWith("sum"))
    {
        sumTextboxNames[y] = (TextBox)c;
        y++;
    }
}

您应该尝试使用LINQ的解决方案。

例如

TextBox [] sumTextBoxes = (from t in this.Controls.Cast<Control>
                          where t is TextBox
                          && t.Name.StartsWith("sum")
                          select t).Cast<TextBox>().ToArray();

答案 2 :(得分:1)

感谢Thorsten,这就是我最终的目标:

string string1;
string string2;
string string3;

private void sumX()
{
    for (int i = 1; i < 31; i++)
    {
        string1 = "br" + i + "txt" + '1';
        string2 = "br" + i + "txt" + '2';
        string3 = "sumTxt" + i;

        TextBox s = (TextBox)this.Controls[string3];
        TextBox b1 = (TextBox)this.Controls[string1];
        TextBox b2 = (TextBox)this.Controls[string2];

        decimal sum = Decimal.Parse(b1.Text) + Decimal.Parse(b2.Text);
        s.Text = sum.ToString();
    }