计时器间隔不随 Trackbar 进度调整
Timer interval not adjusting with Trackbar progress
我试图让用户通过使用轨迹栏 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;
}
谁能告诉我哪里出错了?
问题是在 TrackBar 上向右移动拇指会增加值,因此会增加间隔,反之亦然。将 Max 设置为 1 并将 Min 设置为 1000 不会反转控件的逻辑。如果您通过 IDE 输入这些值,您会看到它修复了这些值,而不是使用 'inverted' 范围。
此外,计时器不是很准确,在 55 或 60 毫秒以下速度会有很大变化,也不会精确地按照您指定的时间间隔触发。来自 MSDN:
The Windows Forms Timer component is single-threaded, and is limited to an accuracy of 55 milliseconds.
最简单的方法是在表格上放置一些 << Faster
和 Slower >>
标签,但要使其更快地向右移动,请使用一些简单的数学运算:
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
int v = (trackBar1.Maximum - trackBar1.Value) + 100;
timer1.Interval = v;
}
+100
是为了避免疯狂快速间隔。
我会使用 ValueChanged
事件来处理更少的事件,并且不需要在 Tick 事件中再次(又一次)重置计时器间隔。
我试图让用户通过使用轨迹栏 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;
}
谁能告诉我哪里出错了?
问题是在 TrackBar 上向右移动拇指会增加值,因此会增加间隔,反之亦然。将 Max 设置为 1 并将 Min 设置为 1000 不会反转控件的逻辑。如果您通过 IDE 输入这些值,您会看到它修复了这些值,而不是使用 'inverted' 范围。
此外,计时器不是很准确,在 55 或 60 毫秒以下速度会有很大变化,也不会精确地按照您指定的时间间隔触发。来自 MSDN:
The Windows Forms Timer component is single-threaded, and is limited to an accuracy of 55 milliseconds.
最简单的方法是在表格上放置一些 << Faster
和 Slower >>
标签,但要使其更快地向右移动,请使用一些简单的数学运算:
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
int v = (trackBar1.Maximum - trackBar1.Value) + 100;
timer1.Interval = v;
}
+100
是为了避免疯狂快速间隔。
我会使用 ValueChanged
事件来处理更少的事件,并且不需要在 Tick 事件中再次(又一次)重置计时器间隔。