2014-02-11 170 views
1

在我的形式,我有一個「加號按鈕」,當一個新的TextBox用戶點擊被添加到窗體:訪問控制

private void btnPlus_Click(object sender, EventArgs e) 
{ 
    TextBox tb = new TextBox(); 
    tb.Name = "textBox" + countTb.ToString(); 
    this.Controls.Add(tb); 
    countTb++; 
} 

我的問題是:我不知道如何訪問這些TextBoxes。 我有一個保存按鈕,當用戶點擊它,我必須將所有TextBox.Text保存到數據庫中,但我不知道如何找到它們。

+0

請問這些是form上的_only_ TextBoxes嗎?你如何將它們保存在數據庫中?每個記錄有一個TextBox.Text值?全部在一行? –

+0

也加入到'List '中,然後再遍歷它 – Jonesopolis

回答

1

你可以使用Controls.OfType如果TextBoxes是在f之上ORM:

var allTextBoxes = this.Controls.OfType<TextBox>(); 
foreach(TextBox txt in allTextBoxes) 
{ 
    // ... 
} 

另一種方法是使用ControlCollection.Find找到一個給定的名稱控件:

for(int i = 1; i <= countTb; i++) 
{ 
    Control[] txtArray = this.Controls.Find("textBox" + i, true); // recursive search 
    if (txtArray.Length > 0) 
    { 
     TextBox txt = (TextBox)txtArray[0]; 
    } 
} 
0

您可以輕鬆地保存在陣列按鈕名稱,或者您可以訪問,形成從文本框 - > this.controls

0

要獲得所有窗體上的文本框,你可以做到以下幾點:

var textBoxes = this.Controls.OfType<TextBox>(); 

然後你可以在他們的所有重複,以得到他們的文本值:

foreach(var textBox in textBoxes) 
{ 
    var text = textBox.Text; 
    //do something to save the values. 
} 
0

一個訪問文本框的最佳方式已創建後,將其插入到數組或列表中,這樣您就可以遍歷該列表/數組訪問任意數量的文本框並將數據保存到數據庫中。

0

如果你想保存表單上的所有TextBox.Text值在一個逗號分隔的字符串:

var allText = string.Join(",", Controls.OfType<TextBox>().Select(x => x.Text)); 

你需要澄清你的問題更多,如果這是不行的。

  • 這會搶在窗體上的文本框中的值,所以如果你不希望保存一些值,你需要首先過濾掉。

  • 如果您想要一個列表,那麼您可以爲每個TextBox保存一條記錄,然後刪除string.Join