-1

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

这些在表单上的文本框中声明,每个团队(主场 H / 客场 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

4 回答 4

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);
     }
}  
于 2013-02-25T14:26:22.613 回答
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));
}
于 2013-02-25T14:24:01.840 回答
0

尝试这个:

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

记得包括using System.Linq

于 2013-02-25T14:28:50.473 回答
0

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

在此处输入图像描述

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

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

于 2013-02-25T14:36:04.513 回答