Интервал таймера не настраивается с ходом трекбара

Я пытаюсь разрешить пользователю управлять интервалом таймера runClick с помощью трекбара trackbartimer

Когда пользователь скользит вправо, таймер должен ускоряться, а когда влево, наоборот; но это не так.

Вот что я пытался:

private void runClick_Tick(object sender, EventArgs e)
    {
      runClick.Interval = trackbartimer.Value;
    }


    private void trackbartimer_Scroll(object sender, EventArgs e)
    {
        trackbartimer.Minimum = 1000;
        trackbartimer.Maximum = 1;
        trackbartimer.TickFrequency = 10;
        trackbartimer.LargeChange = 100;
        trackbartimer.SmallChange = 10;

        runClick.Interval = trackbartimer.Value;

    }

Может ли кто-нибудь показать мне, где я ошибаюсь?


person EyeSeeSharp    schedule 21.03.2015    source источник
comment
Опубликуйте код, который вы действительно используете, установив минимальное значение 1000, а максимальное значение 1 не имеет никакого смысла.   -  person Hans Passant    schedule 22.03.2015


Ответы (1)


Проблема в том, что перемещение бегунка вправо на трекбаре увеличивает значение и, следовательно, интервал, и наоборот. Установка Max на 1 и Min на 1000 не инвертирует логику управления. Если вы введете эти значения через IDE, вы увидите, что они исправляют значения, а не используют «инвертированный» диапазон.

Кроме того, таймер не настолько точен, чтобы скорость сильно изменялась ниже 55 или 60 мс, и он не будет срабатывать точно в указанный вами интервал. Из MSDN :

Компонент Windows Forms Timer является однопоточным, и его точность ограничена 55 миллисекундами.

Самое простое — поместить на форму несколько меток << Faster и Slower >>, но чтобы она быстрее перемещалась вправо, используйте простую математику:

private void trackBar1_ValueChanged(object sender, EventArgs e)
{
    int v = (trackBar1.Maximum - trackBar1.Value) + 100;

    timer1.Interval = v;
}

+100 нужно избегать безумно быстрого интервала.

Я бы использовал событие ValueChanged для обработки гораздо меньшего количества событий, и нет необходимости снова (и снова) сбрасывать интервал таймера в событии Tick.

person Ňɏssa Pøngjǣrdenlarp    schedule 22.03.2015