2012-03-07 70 views
1

我必须写一个程序(C#,WPF),其中数据被从〜30个文本框检索。我想通过循环文本框。我试图创建文本框的数组,但由于每一个方法,我不得不多次重新初始化这个数组它没有很好地工作。如何将多个文本框的内容读取到数组中?

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

主要的问题是,如果有任何其他的方式来循环使用所有这些控件,而无需创建文本框的阵列?

在此先感谢。

回答

0

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

另一种选择是使用一个ItemsControl。你可以样式ItemTemplate中有三个文本框,您数据绑定直接主题的属性。 ItemsControl的ItemsSource将被绑定到一个可观察的主体集合。有关如何执行此操作的更多信息,请访问Data Templating Overview上的Microsoft帮助。

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"); 
     } 
    } 
} 
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); 
相关问题