从多个TextBox元素中获取值

时间:2012-06-29 11:07:25

标签: c# winforms

我有几个不同的TextBox元素,其名称如下:" e0"," e1"," e2"," e3"。我知道有多少,我只是希望能够遍历它们并获取它们的值而不是手动输入每个值。

我假设我会做这样的事情,我只是不知道如何访问该元素。

for(int i= 0; i < 4; ++i) {
    string name = "e" + i;
    // How do I use my newly formed textbox name to access the textbox 
    // element in winforms?
}

3 个答案:

答案 0 :(得分:2)

您可以像这样使用控件的父级(假设您已将所有控件放在表单中,所以我使用了它)

for(int i= 0; i < 4; ++i) {
string name = "e" + i;
TextBox txtBox=this.Controls[name] as TextBox;
Console.Writeline(txtBox.Text);
}

答案 1 :(得分:2)

我建议反对这种方法,因为它容易出错。如果您想重命名它们,如果您忘记了这一点并添加名为e...的其他控件,该怎么办?

相反,我会在像Panel这样的容器控件中收集它们。 然后,您可以使用LINQ查找相关的TextBoxes

var myTextBoxes = myPanel.Controls.OfType<TextBox>();

Enumerable.OfType会相应地过滤和转换控件。如果您想要更多地过滤它们,可以使用Enumerable.Where,例如:

var myTextBoxes = myPanel.Controls
                         .OfType<TextBox>()
                         .Where(txt => txt.Name.ToLower().StartsWith("e"));

现在您可以迭代那些TextBoxes,例如:

foreach(TextBox txt in myTextBoxes)
{
    String text = txt.Text;
    // do something amazing
}

修改

  

TextBoxes位于多个TabPages上。而且,名字有点   更符合逻辑......

当控件位于多个标签页上时,此方法也适用,例如:

var myTextBoxes = from tp in tabControl1.TabPages.Cast<TabPage>()
                  from panel in tp.Controls.OfType<Panel>()
                  where panel.Name.StartsWith("TextBoxGroup")
                  from txt in panel.Controls.OfType<TextBox>()
                  where txt.Name.StartsWith("e")
                  select txt;

(请注意,我添加了另一个条件,即面板名称'必须以TextBoxGroup开头,只是为了表明您还可以合并条件)

当然,检测相关控件的方法可以根据需要进行更改(例如RegularExpression)。

答案 2 :(得分:0)

试试这个:

this.Controls.Find()

for(int i= 0; i < 4; ++i) {
    string name = "e" + i;
    TextBox txtBox = this.Controls.Find(name) as TextBox;
}

或者这个:

this.Controls["name"]

for(int i= 0; i < 4; ++i) {
    string name = "e" + i;
    TextBox txtBox = this.Controls[name] as TextBox;
}