【问题标题】:Timer interval not adjusting with Trackbar progress计时器间隔不随 Trackbar 进度调整
【发布时间】:2015-03-21 22:21:43
【问题描述】:

我试图让用户通过使用跟踪栏trackbartimer 来控制计时器runClick 的间隔

当用户向右滑动时,计时器应该加速,当用户向左滑动时,反之亦然;但事实并非如此。

这是我尝试过的:

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;

    }

谁能告诉我哪里出错了?

【问题讨论】:

  • 发布您实际使用的代码,将最小值设置为 1000,将最大值设置为 1 毫无意义。

标签: c# timer intervals trackbar


【解决方案1】:

问题是在 TrackBar 上向右移动拇指会增加值,因此会增加间隔,反之亦然。将 Max 设置为 1 并将 Min 设置为 1000 不会反转控件的逻辑。如果您通过 IDE 输入这些值,您会看到它修复了这些值,而不是使用“反转”范围。

此外,计时器不是那么准确,以至于在 55 或 60 毫秒以下的速度会有很大变化,也不会在您指定的时间间隔内精确触发。来自MSDN

Windows 窗体计时器组件是单线程的,精度限制为 55 毫秒。

最简单的方法是在表单上放置一些<< FasterSlower >> 标签,但要使其更快地向右移动,请使用一些简单的数学运算:

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

    timer1.Interval = v;
}

+100 是为了避免疯狂的快速间隔。

我会使用ValueChanged 事件来处理更少的事件,并且无需在 Tick 事件中再次(一次又一次)重置计时器间隔。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    相关资源
    最近更新 更多