通过文本框循环检索数据,c#
我有一个名为“Player”的类,它的构造函数接受2个字符串和一个int 这些在表单的文本框中声明,每个队(主队H/客队a)有不同的名称,每个名称类型(最后一个L/第一个F)添加到文本框的名称中。因此,给出一个唯一的名称,如通过文本框循环检索数据,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
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));