正在收集设计中创建的文本框

本文关键字:文本 创建 集设计 | 更新日期: 2023-09-27 18:25:00

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

正在收集设计中创建的文本框

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

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

GetTextBoxes(this);

这是可能的,因为Form本身源自Control

这假设您的TextBoxes位于相同的GroupBoxPanel中。

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

需要using System.Linq;。请注意,textBoxesWithinForm将忽略groupBox中的TextBox,反之亦然。

或者像@Jeff建议的那样,但不是经历这个。如果Control为Textbox:,则进行控制和比较

 foreach (TextBox in this.Controls.OfType<TextBox>())
 {
     //add to your array
 }
foreach (Control c in this.Controls)
  {
    if (c is TextBox)
    {
       //add to your array
    }
  }