在运行时创建控件

时间:2013-02-15 12:25:01

标签: c# .net textbox foreach

我无法设法从运行时创建的textboxes获取值。

我希望用户从checkedlistbox中选择一些内容,并在每次点击按钮时在textboxes中输入他想要的任何值。

如何获取texboxes的名称?他们真的存在吗?我是初学者,我真的不明白它们是如何创建的。

这是我创建textboxes的代码。

    private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        int x = 466;
        int y = 84;
        foreach (var itemChecked in checkedListBox1.CheckedItems)
        {
            int i = 0;
            TextBox tb = new TextBox();
            tb.Location = new Point(x, y);
            tb.Name = "txtBox" + i++.ToString();
            Controls.Add(tb);
            y += 30;
     }

2 个答案:

答案 0 :(得分:5)

只需将i放在foreach之外并完成。

int i = 0;
foreach (var itemChecked in checkedListBox1.CheckedItems)
{
    i++;
    string textBoxName = "textBox" + i.ToString();
    TextBox tb = new TextBox();
    tb.Location = new Point(x, y);
    //tb.Name = "txtBox" + i++.ToString(); <--Your Version
    tb.Name = textBoxName;
    //...
    //Other stuff or your codes
}

答案 1 :(得分:1)

不是搜索确切的名称,而是可以使用搜索控件的字符串(已修复)。

因此,如果您找到该字符串(在您的情况下是&#39;文本框&#39;),您可以做的是在控件名称中搜索该固定字符串。如果它存在则它是动态生成的控制。

foreach(Control c in parentControlIdOrName.Controls)
{
    if(c.GetType()==typeof(TextBox))
    {
        if(((TextBox)c).Name.indexOf("textbox")!=-1)
        {
            // do your coding here...what ever you want....
        }
    }
}

Haven没有经过测试但是,希望是最好的。它可能会奏效。