Question

I have a form with this code assigned to a button:

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

And this code creates textboxes dynamically, one for every "button click", so I can have an "add" button to call it and the user can write a list of things that is not limited.

The question is: How can I assign these "textboxes.Text" to a string? They haven't got a name :S

something like:

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

Thanks!!

Was it helpful?

Solution

If your tbxCantServ is defined as local to a method, then you have to assign a Name to your TextBoxes like:

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

And later in some other method if you want to get the joined text then you can do:

string sAllBoxes = string.Join(",", this.Controls.OfType<TextBox>()
                                .Where(r => r.Name.StartsWith("tbx"))
                                .Select(r => r.Text));

But if you have tbxCantServ defined at class level then you can do:

string sAllBoxes = string.Join(",", tbxCantServ
                                     .Where(r=> r != null)
                                     .Select(r => r.Text));

In string.Join, you can replace , with an empty string or any string depending on your requirement.

OTHER TIPS

You can do it in the same way you created them.

Try this:

string sAllBoxes="";
foreach (TextBox tbxActualCant in tbxCantServ)
{
     sAllBoxes+=tbxActualCant.Text;
}

OR

Using a StringBuilder:

StringBuilder textBuilder = new StringBuilder();
foreach (TextBox tbxActualCant in tbxCantServ)
{
     textBuilder.Append(tbxActualCant.Text);
}
string allText = textBuilder.ToString();

If you have access to your textbox array, you can easily do this:

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

If you don't then use Control collection of your Form, and give name to your textboxes so you can access them using this.Controls[txtBoxName].

If you just want to concatanate your texts without a separator, you can also use string.Concat method:

string sAllBoxes = string.Concat(tbxCantServ.Select(x => x.Text));
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top