2013-02-25 28 views
-1

我有一个名为“Player”的类,其构造函数采用2个字符串和一个int。循环访问文本框来检索数据c#

这些是在表单上的Textboxes中声明的,每个团队(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))); 
      } 
    } 
} 

有帮助吗?

+1

你必须添加球员类的更多细节。 – Tearsdontfalls 2013-02-25 14:24:28

回答

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

从您发布我明白,总有3个控件11名球员,所以没有必要遍历表格中的所有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); 
    } 
} 
0

试试这个:

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

记住,包括using System.Linq

0

我建议你在租约尝试的封装三个文本框到一个单一的用户控件,像这样:

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

} 

这样,你至少可以做你想要更流畅和更安全地做(再加上你修改只是一个用户控件的情况下,你需要一些改变(验证?)):

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

但是如果你问我,你应该重新考虑应用程序的体系结构。