使用循环修改一组WinForm控件?

时间:2014-07-23 14:21:41

标签: c# arrays winforms loops textbox

我有一组文本框控件,我想填充一组双打。控件名称按数字递增,如此

Tol1.Text = lineTolFront[0].ToString();
Tol2.Text = lineTolFront[1].ToString();
Tol3.Text = lineTolFront[2].ToString();
Tol4.Text = lineTolFront[3].ToString();
Tol5.Text = lineTolFront[4].ToString();
Tol6.Text = lineTolFront[5].ToString(); 
//and so on

有一种更简单的方法可以使用循环而无需手动输入值吗?

3 个答案:

答案 0 :(得分:1)

首先,使用LINQ获取所有这些TextBox(注意:当你有许多你不想手动放入集合的控件时,这很有用。)

var tboxes = this.Controls.Cast<Control>()
                 .OfType<TextBox>()
                 .Where(l => l.Name.Contains("Tol"));

然后遍历它们并设置内容。

int i = 0;
foreach(var tb in tboxes)
    tb.Text = lineTolFront[i++].ToString();

答案 1 :(得分:1)

您可以先将TextBox添加到集合中。至少复制/粘贴工作少了一点。

var textBoxes = new List<TextBox> { Tol1, Tol2, Tol3, Tol4, Tol5, Tol6 };

for (var i = 0; i < lineTolFront.Count; i++)
    textBoxes[i].Text = lineTolFront[i].ToString();

关于M Patel的评论,请确保按照您想要从lineTolFront数组中分配双打的顺序将TextBox添加到集合中。

答案 2 :(得分:0)

您可以将控件添加到数组中并循环遍历它:

var controls = new[] { Tol1, Tol2, Tol3, Tol4, Tol5, }; //etc
for(int i = 0; i < controls.Length; i++)
{
    controls[i].Text = lineTolFront[i].ToString();
}