【问题标题】:modifying a group of WinForm controls using a loop?使用循环修改一组 WinForm 控件?
【发布时间】:2014-07-23 14:21:41
【问题描述】:

我有一组文本框控件,我想用一个双精度数组填充它们。控件名称按数字递增,就像这样

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

有没有更简单的方法来使用循环而不需要手动输入值?

【问题讨论】:

    标签: c# arrays winforms loops textbox


    【解决方案1】:

    首先,使用 LINQ 获取所有这些文本框(注意:当您有许多不想手动放入集合中的控件时,这尤其有用)。

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

    【讨论】:

    • @GrantWinney 谢谢。我正在尝试解决手头的问题,并不是所有可能出现的问题;)
    • @GrantWinney 是的,如果确实需要,您可以随时在查询中添加排序。
    • @GrantWinney 很高兴知道。
    【解决方案2】:

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

    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 的评论,确保将 TextBoxes 添加到集合中的顺序与您希望从 lineTolFront 数组中分配双打的顺序相同。

    【讨论】:

    • 与上面的@DaveZuch 相同,如果集合被订购为 new[] { Tol3, Tol1, Tol2, Tol5, Tol4, };此代码将失效
    • 当然,但这不是上面的帖子所说的。 Tol3 需要索引 3
    【解决方案3】:

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

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

    【讨论】:

    • 这没关系,但如果集合被订购为 new[] { Tol3, Tol1, Tol2, Tol5, Tol4, };此代码将失效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2012-12-29
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多