如何将动态创建的对象分配给字符串
本文关键字:对象 分配 字符串 创建 动态 | 更新日期: 2023-09-27 18:00:03
我有一个表单,其中的代码分配给了一个按钮:
TextBox[] tbxCantServ = new TextBox[1];
int i;
for (i = 0; i < tbxCantServ.Length; i++)
{
tbxCantServ[i] = new TextBox();
}
foreach (TextBox tbxActualCant in tbxCantServ)
{
tbxActualCant.Location = new Point(iHorizontal, iVertical);
tbxActualCant.Visible = true;
tbxActualCant.Width = 44;
tbxActualCant.MaxLength = 4;
this.Controls.Add(tbxActualCant);
iVertical = iVertical + 35;
}
这段代码动态地创建文本框,每个"按钮点击"一个,所以我可以用一个"添加"按钮来调用它,用户可以写一个不受限制的列表。
问题是:如何将这些"文本框.文本"分配给字符串?他们没有名字:S
类似于:
string sAllBoxes = tbx1.Text + tbx2.Text + "..." + tbxN.Text;
谢谢!!
如果您的tbxCantServ
被定义为方法的本地,那么您必须将Name
分配给您的TextBoxes,例如:
int counter = 0;
foreach (TextBox tbxActualCant in tbxCantServ)
{
tbxActualCant.Location = new Point(iHorizontal, iVertical);
tbxActualCant.Name = "tbx" + counter++;
tbxActualCant.Visible = true;
tbxActualCant.Width = 44;
tbxActualCant.MaxLength = 4;
this.Controls.Add(tbxActualCant);
iVertical = iVertical + 35;
}
稍后在其他方法中,如果你想获得加入的文本,那么你可以这样做:
string sAllBoxes = string.Join(",", this.Controls.OfType<TextBox>()
.Where(r => r.Name.StartsWith("tbx"))
.Select(r => r.Text));
但如果您在类级别定义了tbxCantServ
,那么您可以执行以下操作:
string sAllBoxes = string.Join(",", tbxCantServ
.Where(r=> r != null)
.Select(r => r.Text));
在string.Join
中,您可以将,
替换为空字符串或任何字符串,具体取决于您的要求
您可以用创建它们的相同方式来完成。
试试这个:
string sAllBoxes="";
foreach (TextBox tbxActualCant in tbxCantServ)
{
sAllBoxes+=tbxActualCant.Text;
}
或
使用StringBuilder
:
StringBuilder textBuilder = new StringBuilder();
foreach (TextBox tbxActualCant in tbxCantServ)
{
textBuilder.Append(tbxActualCant.Text);
}
string allText = textBuilder.ToString();
如果你可以访问你的文本框数组,你可以很容易地做到这一点:
string sAllBoxes = string.Join(" ", tbxCantServ.Select(x => x.Text));
如果不使用Form
的Control
集合,请为文本框命名,以便使用this.Controls[txtBoxName]
访问它们。
如果你只想在没有分隔符的情况下连接文本,你也可以使用string.Concat
方法:
string sAllBoxes = string.Concat(tbxCantServ.Select(x => x.Text));