вы не можете захватить события колеса мыши и увидеть, как долго между ними. Как правило, запускайте таймер, когда вы получаете событие колеса мыши, а затем в следующем событии посмотрите, на каком времени находится таймер (и как много времени прошло между событиями), чтобы определить скорость вращения колеса? Если истекшее время меньше определенного порогового значения, выполните функцию 2, а если оно быстрее определенного порогового значения, выполните функцию 1.
Вам, вероятно, придется настроить его на выполнение функции 1, если таймер отключается, если они выполняют только одну прокрутку.
На самом деле вы можете сделать это следующим образом:
запустить таймер (с интервалом, который указывает на медленное вращение мыши) в событии колеса мыши, затем, если таймер выключается, выполнить функцию 1. Если событие колеса мыши происходит снова, прежде чем таймер выключился, сбросьте таймер увеличьте счетчик (чтобы отслеживать количество событий в колесе с тех пор, как вы что-то сделали), затем запустите второй (более длинный) таймер. если счетчик превышает определенный порог, выполняют функцию 2. По истечении второго таймера сбросьте счетчик. Что-то в этом направлении должно дать вам возможность активировать функцию 1 при медленном вращении колеса и функцию 2, когда колесо быстро поворачивается за несколько «щелчков».
этот код должен давать (очень грязное) указание на то, о чем я думал. После небольшой игры я не совсем уверен, что это хорошее решение ...
private void mouseWheelHandler (object sender, MouseEventArgs e)
{
slowTimer.Enabled = false;
slowTimer.Stop ();
slowTimer.Interval = 200;
slowTimer.Start();
slowTimer.Enabled = true;
m_counter++;
Trace.WriteLine(string.Format("counter={0}", m_counter));
if (fastTimer.Enabled==false)
{
fastTimer.Enabled = true;
fastTimer.Interval = 150;
fastTimer.Start ();
}
if (m_counter>5)
{
Trace.WriteLine("called method 2");
m_counter = 0;
fastTimer.Stop ();
slowTimer.Enabled = false;
slowCheckTimer.Stop ();
slowCheckTimer.Interval = 250;
slowCheckTimer.Start();
slowCheckTimer.Enabled = true;
}
}
private void slowTimer_Tick(object sender, EventArgs e)
{
Trace.WriteLine("slow timer ticked");
if (slowCheckTimer.Enabled==false)
{
Trace.WriteLine ("called method 1");
}
slowTimer.Enabled = false;
}
private void fastTimer_Tick(object sender, EventArgs e)
{
fastTimer.Enabled = false;
Trace.WriteLine("fast timer ticked");
m_counter = 0;
fastTimer.Stop ();
}
private void slowCheckTimer_Tick(object sender, EventArgs e)
{
Trace.WriteLine("slow check timer ticked");
slowCheckTimer.Stop ();
slowCheckTimer.Enabled = false;
}