2013-02-15 67 views
1

我无法设法获取在运行时创建的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; 
    } 
+1

你使用winforms吗? – 2013-02-15 12:26:15

+0

也 - 在哪里(那么)你需要的名字? – 2013-02-15 12:27:13

+1

你正在初始化我在循环内 – CR41G14 2013-02-15 12:27:41

回答

5

只需将foreach,做外i

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 
} 
+0

和Controls.Add? – AbZy 2013-02-15 12:35:06

+0

OP会明白':D' – spajce 2013-02-15 12:36:20

+0

大声笑..我看到OP是比较新/初学者。会认为没有必要。 – AbZy 2013-02-15 12:37:28

1

而不是搜索确切的名称你可以做的是有一个字符串(固定),它是搜索控制。

所以如果你发现那个字符串(在你的情况下是'文本框'),你可以做的是在控件的名字中搜索那个固定的字符串。如果它存在,那么它是动态生成的控件。

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

还没有测试过,希望是最好的。它可能工作。