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

时间:2014-04-25 15:54:19

标签: c# .net user-controls

我有一个表格,其代码分配给一个按钮:

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

此代码动态创建文本框,每个“按钮点击”一个,所以我可以有一个“添加”按钮来调用它,用户可以编写一个不受限制的事项列表。

问题是:如何将这些“textboxes.Text”分配给字符串?他们没有名字:S

类似的东西:

string sAllBoxes = tbx1.Text + tbx2.Text + "..." + tbxN.Text;

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以按照创建它们的方式进行操作。

试试这个:

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

答案 1 :(得分:3)

如果您的tbxCantServ 被定义为方法,那么您必须为文本框分配Name,如:

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中,您可以使用空字符串或任何字符串替换,,具体取决于您的要求。

答案 2 :(得分:2)

如果您有权访问文本框数组,则可以轻松执行此操作:

string sAllBoxes = string.Join(" ", tbxCantServ.Select(x => x.Text));

如果您没有使用Control的{​​{1}}集合,并为您的文本框命名,以便您可以使用Form访问它们。

如果您只想在没有分隔符的情况下连接文本,也可以使用this.Controls[txtBoxName]方法:

string.Concat