我通过drag_n_dropping添加了几个文本框。现在我想在文本框数组下收集它们。我知道如何在代码中创建文本框数组,但不知道如何收集设计期间创建的文本框。有人可以帮忙吗?
答案 0 :(得分:3)
有时文本框不是直接放在窗体上,而是放在容器控件上,如制表符控件或拆分容器。如果要查找所有这些文本框,递归将有助于
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
。
答案 1 :(得分:2)
这假设您的TextBox在同一GroupBox
或Panel
。
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
}
答案 2 :(得分:1)
foreach (Control c in this.Controls)
{
if (c is TextBox)
{
//add to your array
}
}