如何将动态创建的对象分配给字符串

本文关键字:对象 分配 字符串 创建 动态 | 更新日期: 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));

如果不使用FormControl集合,请为文本框命名,以便使用this.Controls[txtBoxName]访问它们。

如果你只想在没有分隔符的情况下连接文本,你也可以使用string.Concat方法:

string sAllBoxes = string.Concat(tbxCantServ.Select(x => x.Text));