Jamie888 Ответов: 1

Как перебирать массив и отображать его элементы один за другим


Привет, у меня есть массив, скажем, 3 элемента в нем, как показано ниже:
string [] message = {how, are, you};
int counterTimerValue = 0;


Например, для каждого элемента в массиве мне нужно было бы отображать их в течение 10 секунд. И когда он достигнет последнего элемента, он вернется к первому элементу и будет отображать первый элемент, второй элемент снова и снова.
Я использовал объект timer для управления длительностью, но не знаю, как назначить каждому элементу таймер или что-то в этом роде.
Ниже приведены мои текущие коды:

for(int i = 0; i < message.Length; i++)
{
    //txtNotification.Text = "";
    //txtNotification.Text = "Notification:";

    counterTimerValue = 10;
    displayTimer.Interval = 1000; // 1 second
    displayTimer.Tick += new EventHandler(this.displayTimerTick);
    displayTimer.Start();

    //txtNotification.Text = txtNotification.Text + message[i];
}



private void displayTimerTick(Object source, EventArgs e)
{
     counterTimerValue--;
     try
     {
         int index = (messageArray.Length - 1 - (counterTimerValue % messageArray.Length));
         txtNotification.Text = messageArray[index];
     }
     catch (Exception)
     {
     }
     if (counterTimerValue == 0)
     {
        displayTimer.Stop();
     }
}



Вышеприведенные коды будут отображать только последний элемент "вы", потому что цикл for завершит выполнение всех элементов в массиве вместо того, чтобы ждать, пока таймер закончит один элемент, а затем перейдет только к другому элементу.
Любая помощь будет оценена по достоинству. Спасибо.

Что я уже пробовал:

1. Поиск в интернете любых идей/мозговой штурм, но безрезультатно.

Richard MacCutchan

Не запускайте цикл сначала. Создайте таймер и установите индекс массива равным нулю. По мере того как каждое событие таймера выводит сообщение, увеличивайте значение индекса, не забывая проверять последнее значение, и выходите из таймера.

1 Ответов

Рейтинг:
6

CPallini

Вы должны переместить код, отображающий элемент массива, в обработчик таймера. Что-то вроде

private void displayTimerTick(Object source, EventArgs e)
{
    counterTimerValue--;
    try
    {
       int index = (message.length - 1 - (counterTimerValue % message.length));
       txtNotification.Text = message[index];
    }
    catch (Exception)
    {
    }

    if (counterTimerValue == 0)
    {
       displayTimer.Stop();
    }
}


Jamie888

Извините, сэр,я действительно не понимаю. Если я перемещу отображаемые коды в обработчик таймера, как описано выше, не будет ли текст отображаться только после окончания таймера?

CPallini

К сожалению, мой плохой. Теперь это (надеюсь) исправлено.

Jamie888

Сэр, я обновил свой вопрос, основываясь на вашем предложении. После того, как я попробовал это сделать, но все равно результат продолжает мигать с каждым интервалом в одну секунду. Неужели цикл for все еще необходим?

CPallini

Конечно, вам больше не нужна петля.

Jamie888

- Конечно, сэр. Сейчас программа работает. Спасибо за Ваши советы и помощь. Очень ценю это.

CPallini

Добро пожаловать.

Jamie888

О-О-О, это же дисплейтимер.Интервал = 1000, что вызывает мигание в течение одного секундного интервала?