C# 将文本框放入文本框[]数组
我试图创建一个循环,以避免将这些行复制粘贴30次 名单如下: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];
- sum1至sum30
- br1txt1至br30txt1
- br1txt2至br30txt2
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):您“发现”和文本框的顺序……我猜是这样的