在循环C#中更改标签

时间:2016-03-01 20:28:11

标签: c# arrays loops for-loop

我创建了一个for循环,我想在每次循环运行时将从数组加载的随机文本添加到不同的标签。我已将所有标签添加到我的表单中,称为lbl1,lbl2,lbl3等。

Random r = new Random();

        for (int i = 1; i <= 4; i++)
        {
            int randomtext = r.Next(0, mytext.GetLength(0)); //choosing random element of array to be added to label
            //this is where I want to add the text to a random label
        }

如何每次将文本添加到随机标签?我需要创建某种数组或列表吗?我希望每次都有一些方法可以将i添加为变量名的后缀。对不起,如果这很明显,我是C#的新手。

谢谢!

3 个答案:

答案 0 :(得分:2)

根据您使用的框架,有几种方法可以做到这一点。

在Windows窗体中,您可以使用Controls [“lbl1”],因此在您的情况下,您将按如下方式编写循环:

Random r = new Random();
for (int i = 1; i <= 4; i++)
{
   var randomtext = r.Next(0, mytext.GetLength(0)); //choosing random element of array to be added to label
   var label = (Label)Controls["lbl"+i];
   label.Text = randomtext;
}

或类似的东西(我不记得Windows窗体的确切Api)。

在WPF上,您将使用FindName方法。容器控件有这种方法。

大多数其他框架应该有类似的方法。在最坏的情况下,你可以使用反射:

var label = (Label)this.GetType().GetProperty("lbl" + i).GetValue(this, null);

答案 1 :(得分:0)

    Random r = new Random();

    for (int i = 1; i <= 4; i++)
    {
        int randomtext = r.Next(0, mytext.GetLength(0)); //choosing random element of array to be added to label
        var randomLblIndx = r.Next(1,5);// I am assuming you have 4 lablels only
        var lbl = (Label)this.Controls[lbl + randomLblIndx.ToString()];
        lbl.Text = myarrayOfText[randomtext];
    }

答案 2 :(得分:0)

如果您正在使用Windows窗体,则在您创建的每个窗体(或组件)中都有一个名为Controls的属性。 此属性是ControlCollection类型的集合,并且有一个名为Find的函数,它允许您通过它的名称查找特定控件。

所以,你可以这样做:

    const labelProfix = "lbl";
    Random r = new Random();

    for (int i = 1; i <= 4; i++)
    {
        var randomNumber = r.Next(0, mytext.GetLength(0));
        var label = (Label)Controls.Find(labelPrefix + randomNumber.ToString(), false).First();
        label.Text = "My text";
    }

请注意Find()返回一个数组(名称可能不明确),因此我们使用First()的扩展方法System.Linq;来获取第一个元素。此外,感谢First(),如果它没有找到任何带有我们传递的名称的控件,那么该行代码将抛出异常,因此您可以在不获取NullReferenceExceptions的情况下知道代码是否错误