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);