-1

2 つの文字列と int を取るコンストラクタを持つ「Player」というクラスがあります。

これらはフォームのテキストボックスで宣言され、各チーム (ホーム 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

Controlsあなたの投稿から、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);
     }
}  
于 2013-02-25T14:26:22.613 に答える
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

少なくとも、次のように 3 つのテキスト ボックスを単一の 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();
    }

}

そうすれば、少なくともやりたいことをより流暢かつ安全に行うことができます (さらに、何かを変更する必要がある場合に備えて、1 つの 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 に答える
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 に答える