如何在timer_tick事件上遍历对象列表?

时间:2019-01-07 07:22:25

标签: c# .net winforms random

我有一个清单

static List<Participants> soop = ParticipantRepository.GetAllParticipants();

它有大约800个项目。然后是一个label和一个timer。在timer_tick,我想随机显示其中一项。这是该事件的代码

private void timer1_Tick(object sender, EventArgs e) {
            foreach (var participants in soop)
            {
                a = participants.RollNumber;
                label1.Text = a;
                break;
            }
            counter++;
            if (counter == 200) {
                timer1.Stop();
                pictureBox5.Visible = false;
                counter = 0;
            }
        }

到目前为止,我还无法实现随机功能,因为仅显示一个RollNumber,然后计时器开始计时并耗尽。我在做什么错了?

2 个答案:

答案 0 :(得分:1)

我建议使用随机类。

    Random randomGen = new Random();
    private void timer1_Tick(object sender, EventArgs e)
    {

        var i = randomGen.Next(0, soop.Count);
        label1.Text = soop[i].RollNumber;

        counter++;
        if (counter == 200)
        {
            timer1.Stop();
            pictureBox5.Visible = false;
            counter = 0;
        }
    }

答案 1 :(得分:0)

在每个滴答声中,将调用timer1_Tick,因此您的foreach循环从头开始,最后每次都显示第一项。相反,您可以存储显示的最后一项的索引。您已经有counter,所以我们来使用它:

private void timer1_Tick(object sender, EventArgs e) 
{
    label1.Text = soop[counter % soop.Count].RollNumber;

    counter++;
    if (counter == 200) {
        timer1.Stop();
        pictureBox5.Visible = false;
        counter = 0;
    }
}