从动态创建的WinForms文本框中获取文本

时间:2013-05-30 12:39:19

标签: c# winforms textbox

我正在制作一个带有动态创建的文本框的窗体,正如您在方法中看到的那样。

    public void createPassengerBoxes(int numPassenger)
    {
        TextBox[] passengerBoxes = new TextBox[numPassenger];

        for (int u = 0; u < passengerBoxes.Count(); u++)
        {
            passengerBoxes[u] = new TextBox();
        }
        int i = 0;
        foreach (TextBox txt in passengerBoxes)
        {
            string name = "passenger" + i.ToString();

            txt.Name = name;
            txt.Text = name;
            txt.Location = new Point(244, 32 + (i * 28));
            txt.Visible = true;
            this.Controls.Add(txt);
            i++;
        }
    }
}

如何从框中访问文本?

3 个答案:

答案 0 :(得分:0)

将文本框声明移到函数外部。这使得它可以从类中的其他函数访问:

class MyFormsClass
{
    // declare textboxes at class level
    TextBox[] passengerBoxes;

    public void createPassengerBoxes(int numPassenger)
    {
       passengerBoxes = new TextBox[numPassenger];
       ...
    }

    public void OnButtonClick(...)
    {
        if (passengernBoxes != null)
        {
             foreach (TextBox txt in passengerBoxes)
             {
                 // do something with textboxes
             }
        }
    }
    ...
}

答案 1 :(得分:0)

虽然我不确定在什么时候,或者基于什么操作,你想获取数据,这是非常通用的方法:

private String[] GetTextBoxStrings()
{
    List<String> list = new List<String>();
    foreach (Control c in this.Controls)
    {
        if (c is TextBox)
            list.Add(((TextBox)c).Text);
    }
    return list.ToArray();
}

答案 2 :(得分:0)

你也可以使用Lambda:

var strings = Controls.OfType<TextBox>()
                      .Select(c => c.Text)
                      .ToList();

这只有在没有嵌套控件的情况下才有用 - 例如一个pannel或一个包含一些textBoxes的组