C# 将文本框放入文本框[]数组

C# 将文本框放入文本框[]数组,c#,arrays,textbox,C#,Arrays,Textbox,我试图创建一个循环,以避免将这些行复制粘贴30次 名单如下: sum1至sum30 br1txt1至br30txt1 br1txt2至br30txt2 但我得到的错误是,textbox数组似乎试图将textbox的值而不是文本框的值重新放入数组中,我应该如何解决这个问题 private void sumX() { TextBox[] sumTextboxNames; sumTextboxNames = new TextBox[29];

我试图创建一个循环,以避免将这些行复制粘贴30次

名单如下:

  • sum1至sum30
  • br1txt1至br30txt1
  • br1txt2至br30txt2
但我得到的错误是,textbox数组似乎试图将textbox的值而不是文本框的值重新放入数组中,我应该如何解决这个问题

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();  
        }  
   }
private void sumX()
{
TextBox[]sumtextboxname;
sumTextboxNames=新文本框[29];
对于(int i=1;i<31;i++)
{
if(sumTextboxNames[0]==null)
{
int y=0;
foreach(此.Controls中的控件c)
{
如果(c是文本框&&c.Name.StartsWith(“sum”))
{
sumTextboxNames[y]=(TextBox)c;
y++;
}
}
}
其他的
{
}
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();
}  
}

以下几行根本不起作用:

string1 = "br" + i + "txt" + 1 + ".Text";
string2 = "br" + i + "txt" + 2 + ".Text";
因为
1
2
不是字符串,不能连接到字符串。这将立即导致编译器错误

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

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);
}

for(int i=1;i以下行根本不起作用:

string1 = "br" + i + "txt" + 1 + ".Text";
string2 = "br" + i + "txt" + 2 + ".Text";
因为
1
2
不是字符串,不能连接到字符串。这会立即导致编译器错误

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

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);
}

for(inti=1;iThorsten 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();
TextBox[]sumTextBoxes=(来自this.Controls.Cast中的t
其中t是文本框
&&t.Name.StartsWith(“总和”)
选择t).Cast().ToArray();

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();
TextBox[]sumTextBoxes=(来自this.Controls.Cast中的t
其中t是文本框
&&t.Name.StartsWith(“总和”)
选择t).Cast().ToArray();

多亏了托尔斯滕,这就是我的结局:

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();
    }
string1;
弦2;
弦3;
私有void sumX()
{
对于(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];
textboxb1=(TextBox)this.Controls[string1];
textboxB2=(TextBox)this.Controls[string2];
十进制和=decimal.Parse(b1.Text)+decimal.Parse(b2.Text);
s、 Text=sum.ToString();
}

多亏了托尔斯滕,这就是我的结局:

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();
    }
string1;
弦2;
弦3;
私有void sumX()
{
对于(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];
textboxb1=(TextBox)this.Controls[string1];
textboxB2=(TextBox)this.Controls[string2];
十进制和=decimal.Parse(b1.Text)+decimal.Parse(b2.Text);
s、 Text=sum.ToString();
}

1和2应该很容易修复,“string1=”br“+i+”txt“+”1”;这应该可以生成我需要的字符串,但我仍然不知道如何在你在代码中键入的for循环=string3中使用它,等等,DarkMageoki没有在尝试时让它工作,但当我进行转换(textbox)时,它工作得很好。就像textbox s=(textbox)this.Controls[string3];我将把我在new awnser中使用的代码作为参考编辑我的答案以包括缺少的类型转换:-)1和2应该很容易修复,“string1=”br“+i+”txt”+'1';这应该是我需要的字符串,但我仍然不知道如何在代码中键入=string3的for循环中使用它,等等,DarkMageoki没有让它工作,但当我执行cast(textbox)时,它工作得很好。就像textbox s=(textbox)this.Controls[string3];我将把我在new awnser for Refresence中使用的代码编辑我的答案以包括丢失的类型:-)是的,LINQ看起来非常有趣,我将来会看一看。是的,LINQ看起来非常有趣,我将来会看一看。我想你需要在这里澄清意图,重新设计。你解析控件集合(我假设WinForm):您“发现”“总和”文本框的顺序…我猜…具有某种意义或目的:它们可能以某种顺序在表单上可见(?)(我希望)。但是解析控件集合可能无法可靠地按预期顺序提供文本框。我建议您考虑使用一个列表,并在其中填入“sum_”文本框和两个列表。使用一个for循环,使用索引访问整数,将它们相加,将结果转换为字符串,赋值等。最好的是,我认为您需要在这里澄清意图,重新设计。您解析控件集合(我假设为WinForm):您“发现”和文本框的顺序……我猜是这样的