C#遍历名称列表,并在每次循环时在不同的标签上显示名称

时间:2019-01-21 12:54:40

标签: c# list for-loop random label

我正在创建此随机抽奖应用程序。例如,用户输入6个名称,然后单击“随机化”按钮,它会在标签之间彼此相邻地随机显示名称。因此,例如index [0]处的名称将在index [3]处播放名称,依此类推。我遇到的问题是我不确定如何遍历并将每个名称显示在不同的标签上。有没有一种方法可以计算我的标签并循环遍历?这是我的代码,用于遍历列表中的名称并随机选择一个名称以显示在第一个标签上。

for(int i = 0; i < names.Count; i++)
        {
            Random rand = new Random();
            int index = rand.Next(names.Count);
            var name = names[index];

            lblFirstName.Text = name;
            lblFirstName.Visible = true;
            names.RemoveAt(index);
        }

如您所见,名称将始终显示在lblFirstName上。我还有5个名为lblSecondName等的标签。

2 个答案:

答案 0 :(得分:0)

var firstNames = new [] { lblFirstName1, lblFirstName2 , lblFirstName3 , .......... };

for(int i = 0; i < names.Count; i++)
        {
            Random rand = new Random();
            int index = rand.Next(names.Count);
            var name = names[index];

            firstNames[i].Text = name;
            firstNames[i].Visible = true;
            names.RemoveAt(index);
        }  

答案 1 :(得分:0)

  1. 使用While代替For
  2. 将标签放在同一控件(例如Panel1)上

    List<string> labels = new List<string>() { "lblFirstName", "lblSecondName" , "lblThirdName" , .......... };
    while (names.Count > 0) {
        Random rand = new Random();
        int index = rand.Next(names.Count);
        var name = names[index];
        names.RemoveAt(index);
    
        index = rand.Next(labels.Count);
        //WebForms
        Panel1.FindControl(labels[index]).Text = name;
        Panel1.FindControl(labels[index]).Visible = true;
    
        //WinForms
        Panel1.Controls(labels[index]).Text = name;
        Panel1.Controls(labels[index]).Visible = true;
    
        labels.RemoveAt(index);
    }