通过文本框循环检索数据,c#

通过文本框循环检索数据,c#,c#,textbox,foreach,C#,Textbox,Foreach,我有一个名为“Player”的类,它的构造函数接受2个字符串和一个int 这些在表单的文本框中声明,每个队(主队H/客队a)有不同的名称,每个名称类型(最后一个L/第一个F)添加到文本框的名称中。因此,给出一个唯一的名称,如txtFHome1 在foreach循环中,我想创建一个新的播放器,其中包含页面上文本框的详细信息 这就是我目前所得到的 List <Player> HomeTeam = new List<Player> private void btnAc

我有一个名为“Player”的类,它的构造函数接受2个字符串和一个int

这些在表单的文本框中声明,每个队(主队H/客队a)有不同的名称,每个名称类型(最后一个L/第一个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)));
          }
     }
} 
List HomeTeam=新列表
私有无效BTNAcept_单击(对象发送者,事件参数e)
{
foreach(此.Controls中的控件c)
{
对于(int i=0;i<10;i++)
{
主队.Add(新球员(c.Name.EndsWith(“FHome”+i)、c.Name.EndsWith(“LHome”+i)、c.Name.EndsWith(“upDownH”+i));
}
}
} 

有什么帮助吗?

第一种方法是将字典与所有控件一起使用。这是最快最简单的方法

Dictionary<int, TextBox> FHome;
Dictionary<int, TextBox> LHome;
Dictionary<int, TextBox> upDownH;
然后在代码中可以使用

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

从您的帖子中我了解到11名玩家总是有3个控件,因此不需要在表单中通过所有
控件进行迭代

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);
     }
}  
private void btnacept_单击(对象发送者,事件参数e)
{
对于(int i=0;i<10;i++)
{
var player=new player(((文本框)this.Controls.FindControl(“FHome”+i)).Text,((文本框)this.Controls.FindControl(“LHome”+i)).Text,((NumericUpDown)this.Controls.FindControl(“upDownH”+i)).Value);
主队。添加(球员);
}
}  
试试这个:

Controls.OfType<TextBox>().ToList().ForEach((textbox) =>
    {
      for (int i = 0; i < 10; i++)
      {
        textbox.Text = "your text";
      }
    });
Controls.OfType().ToList().ForEach((文本框)=>
{
对于(int i=0;i<10;i++)
{
textbox.Text=“您的文本”;
}
});

请记住使用System.Linq包含
,我建议您至少尝试将三个文本框封装到一个用户控件中,如下所示:

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在此.Controls.OfType()中)
添加(新玩家(cpp.Param1、cpp.Param2、cpp.Param3));

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

你必须添加更多关于玩家类的细节。
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();
    }

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