循环通过Textboxes来检索数据,c#

时间:2013-02-25 14:16:31

标签: c# textbox foreach

我有一个名为“Player”的类,其构造函数需要2个字符串和一个int。

这些在表单上的文本框中声明,每个团队(Home H / Away A)具有不同的名称,每个名称类型(Last L / First F)添加到文本框的名称。因此给出一个唯一的名称,如txtFHome1

foreach循环中,我想创建一个新的播放器,其中包含页面上文本框的详细信息。

这是我到目前为止所得到的。

List <Player> HomeTeam = new List<Player>    

private void btnAccept_Click(object sender, EventArgs e)
{
     foreach (Control c in this.Controls)
     {
          for (int i = 0; i < 10; i++)
          {
            HomeTeam.Add (new Player(c.Name.EndsWith("FHome"+i),c.Name.EndsWith("LHome"+i),c.Name.EndsWith("upDownH"+i)));
          }
     }
} 

任何帮助?

4 个答案:

答案 0 :(得分:1)

从你的帖子中我了解到11个玩家总共有3个控件,因此无需在表单中迭代所有Controls

private void btnAccept_Click(object sender, EventArgs e)
{
     for (int i = 0; i < 10; i++)
     {
          var player = new Player(((TextBox)this.Controls.FindControl("FHome" + i)).Text, ((TextBox)this.Controls.FindControl("LHome" + i)).Text, ((NumericUpDown)this.Controls.FindControl("upDownH" + i)).Value);
          HomeTeam.Add(player);
     }
}  

答案 1 :(得分:0)

第一种方法是使用带有所有控件的字典。这是最快捷,最简单的方式。

Dictionary<int, TextBox> FHome;
Dictionary<int, TextBox> LHome;
Dictionary<int, TextBox> upDownH;

你应该像这样添加控件:

FHome.Add(0, textBoxLHome0);
FHome.Add(1, textBoxLHome1);

然后在您的代码中,您可以使用

for (int i = 0; i < 10; i++)
{
    HomeTeam.Add (new Player(FHome[i].Text, LHome[i].Text, upDownH[i].Text));
}

答案 2 :(得分:0)

试试这个:

Controls.OfType<TextBox>().ToList().ForEach((textbox) =>
    {
      for (int i = 0; i < 10; i++)
      {
        textbox.Text = "your text";
      }
    });

请记得加入using System.Linq

答案 3 :(得分:0)

我建议您至少尝试将三个文本框封装到一个UserControl中,如下所示:

enter image description here

public partial class ControlPlayerParams : UserControl {

    public string Param1 { get { return this.textBox1.Text; } }
    public string Param2 { get { return this.textBox2.Text; } }
    public string Param3 { get { return this.textBox3.Text; } }

    public ControlPlayerParams() {
        this.InitializeComponent();
    }

}

这样,你至少可以更流畅,更安全地做你想做的事情(另外你只需修改一个UserControl,以防你需要改变一些东西(验证??)):

foreach (ControlPlayerParams cpp in this.Controls.OfType<ControlPlayerParams>())
  HomeTeam.Add(new Player(cpp.Param1, cpp.Param2, cpp.Param3));

但是如果你问我,你应该重新考虑一下应用程序的架构。