在运行时创建的访问控制

时间:2014-02-11 16:19:04

标签: c# winforms controls

在我的表单中,我有一个“加号按钮”,当用户点击它时,新的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保存到数据库中,但我不知道如何找到它们。

5 个答案:

答案 0 :(得分:1)

如果Controls.OfType位于表单顶部,则可以使用TextBoxes

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];
    }
}

答案 1 :(得分:0)

您可以轻松地在阵列上保存按钮名称,也可以从 - &gt;访问表单文本框。 this.controls

答案 2 :(得分:0)

要获取表单上的所有TextBox,您可以执行以下操作:

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

然后你可以迭代它们以获得它们的文本值:

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

答案 3 :(得分:0)

创建文本框后访问文本框的最佳方法之一是将其插入到数组或列表中,这样您就可以遍历该列表/数组以访问任意数量的文本框和将数据保存到数据库中。

答案 4 :(得分:0)

如果要将表单上的所有TextBox.Text值保存在逗号分隔的字符串中:

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

如果这不起作用,您需要更多地澄清您的问题。

  • 这将获取表单上每个 TextBox的值,因此如果您不想保存某些值的值,则需要对其进行过滤先出。

  • 如果您想要一个列表,那么您可以为每个TextBox保存一条记录,然后删除string.Join