2013-02-15 101 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.... 
     } 
    } 
} 

還沒有測試過,希望是最好的。它可能工作。