C# 收集设计中创建的文本框

C# 收集设计中创建的文本框,c#,arrays,textbox,C#,Arrays,Textbox,我通过拖放添加了几个文本框。现在我想把它们都收集到一个文本框数组中。我知道如何在代码中创建文本框数组,但不知道如何收集在设计过程中创建的文本框。有人能帮忙吗?这假设您的文本框位于相同的组框或面板中 foreach (Control c in this.Controls) { if (c is TextBox) { //add to your array } } var groupOfTextBoxes = groupBox1.Controls.Of

我通过拖放添加了几个文本框。现在我想把它们都收集到一个文本框数组中。我知道如何在代码中创建文本框数组,但不知道如何收集在设计过程中创建的文本框。有人能帮忙吗?

这假设您的文本框位于相同的
组框
面板

foreach (Control c in this.Controls)
  {
    if (c is TextBox)
    {
       //add to your array
    }
  }
var groupOfTextBoxes = groupBox1.Controls.OfType<TextBox>();
MessageBox.Show(groupOfTextBoxes.Count().ToString());

var textBoxesWithinForm = this.Controls.OfType<TextBox>();
MessageBox.Show(textBoxesWithinForm.Count().ToString());

有时文本框不是直接放在表单上,而是放在容器控件上,如选项卡控件或拆分容器。如果您想找到所有这些文本框,递归将有所帮助

private List<TextBox> _textboxes = new List<TextBox>();

private void GetTextBoxes(Control parent)
{
    foreach (Control c in parent.Controls) {
        var tb = c as TextBox;
        if (tb != null) {
            _textboxes.Add(tb);
        } else {
            GetTextBoxes(c);
        }
    }
}

这是可能的,因为
表单
本身源于
控件

Downvoter,请评论!我已经测试了这段代码,它是有效的。经常发生:(我们不得不接受它。我不能给出比1:)+1更多的分数,我建议进行一次小的优化。如果((textbox=c as textbox)!=null)使用
as
而不是
is
和textbox cast->
谢谢您的建议,+1.不适用于嵌套控件层次结构。递归将是一种有效的解决方案。
private List<TextBox> _textboxes = new List<TextBox>();

private void GetTextBoxes(Control parent)
{
    foreach (Control c in parent.Controls) {
        var tb = c as TextBox;
        if (tb != null) {
            _textboxes.Add(tb);
        } else {
            GetTextBoxes(c);
        }
    }
}
GetTextBoxes(this);