如何将多个文本框的内容读入数组?

时间:2012-03-07 18:57:12

标签: c# .net wpf textbox

我必须编写一个程序(C#,WPF),其中从~30个TextBox中检索数据。我想循环文本框。我试图创建一个文本框数组,但它不能很好地工作,因为在每个方法中我都必须反复重新初始化这个数组。

 TextBox[] subjects = { textBox1, textBox2, textBox3, textBox4, textBox5, textBox6, textBox7, textBox8, textBox9, textBox10 };
 TextBox[] credits = { textBox11, textBox12, textBox13, textBox14, textBox15, textBox16, textBox17, textBox18, textBox19, textBox20 };
 TextBox[] marks = { textBox21, textBox22, textBox23, textBox24, textBox25, textBox26, textBox27, textBox28, textBox29, textBox30 };

Subject.SubjectName = subjects[selection].Text;
Subject.AmountOfCredits= Convert.ToInt32(credits[selection].Text);
Subject.Mark = Convert.ToInt32(marks[selection].Text);

主要问题是,是否有其他方法可以在不创建文本框数组的情况下循环浏览所有控件?

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以将每个文本框绑定到属性。然后在每个属性的setter中,您将在数组中设置适当的值。

public class test
{
    private string[] _textBoxes;

    // constructor
    public test()
    {
        _textBoxes = new string[30];
    }

    // bind your textboxes to a bunch
    // of properties
    public string Property0
    {
        get
        {
            return _textBoxes[0];
        }
        set
        {
            _textBoxes[0] = value;
            OnPropertyChanged("Property0");
        }
    }
}

答案 1 :(得分:0)

您是否考虑过使用DataGrid控件?您可以有三列(主题,积分和标记),并通过SelectedItem属性轻松访问所选记录?

另一种选择是使用ItemsControl。您可以将ItemTemplate设置为具有三个文本框,您可以直接将其数据绑定到Subject的属性。然后,ItemsControl的ItemsSource将绑定到可观察的Subjects集合。有关如何执行此操作的详细信息,请转至Microsoft Data Templating Overview上的帮助。

答案 2 :(得分:0)

难道不能将数组全局化为表单而不是本地方法吗?这样你只需要创建一次数组(可能在表单的Load()事件中)。

如果控制数组不是一个选项,你可以按名称查找控件(尽管这比你的数组方法慢一点)

string idx = (selection + 1).ToString();  // convert selection to 1-based index string

TextBox subjectText =    (TextBox)FindControl("textBox" + idx);
TextBox amtCreditsText = (TextBox)FindControl("textBox1" + idx);
TextBox marksText =      (TextBox)FindControl("textBox2" + idx);