Как перебрать список объектов по событию timer_tick? - PullRequest
0 голосов
/ 07 января 2019

У меня есть список

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 голосов
/ 07 января 2019

Я бы предложил использовать случайный класс.

    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;
        }
    }
0 голосов
/ 07 января 2019

На каждом тике вызывается 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...