【问题标题】:C# Loop through List of names and display names on a different label each time it loopsC#循环遍历名称列表并在每次循环时在不同的标签上显示名称
【发布时间】:2019-06-14 20:57:51
【问题描述】:

我正在创建这个 Random Draw 应用程序。例如,用户输入 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 等的标签。

【问题讨论】:

  • Random rand = new Random(); 总是在循环之外,否则你可能会得到重复的结果
  • @fubo 感谢您的提示,我会更改的
  • new Random(); 等于 new Random(seed : CurrentMilliSecond);,因此自 CurrentMilliSecond 以来(几乎)所有项目的值相同 不会改变 在循环内
  • 为什么不简单地将标签添加到循环之前的列表中?然后你可以访问每个像labels[i].Text = ...
  • @blins 是的,我明白你的意思,但是我必须以编程方式设置每个标签的位置,这样它们就不会相互显示?对吗?

标签: c# list for-loop random label


【解决方案1】:
  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);
    }
    

【讨论】:

  • 感谢您的回答。解决了我的问题,虽然它需要一些调整,但它帮助我解决了,所以谢谢!!
【解决方案2】:
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);
        }  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-12
    • 2017-06-03
    • 1970-01-01
    • 2018-09-03
    • 2016-04-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    相关资源
    最近更新 更多