マウス ホイール イベントをキャプチャして、それらの間の長さを確認できませんか。基本的に、マウス ホイール イベントを取得したときにタイマーを開始し、次のイベントでタイマーの状態 (およびイベント間の経過時間) を確認して、ホイールが回転している速度を判断します。経過時間が特定のしきい値よりも小さい場合は機能 2 を実行し、特定のしきい値よりも速い場合は機能 1 を実行します。
スクロールが 1 回しかない場合にタイマーがオフになった場合は、おそらく機能 1 を実行するように設定する必要があります。
実際には、次の方法で実行できる場合があります。
マウス ホイール イベントでタイマーを開始し (ゆっくりとしたマウス ホイール操作を示す間隔で)、タイマーがオフになった場合は機能 1 を実行します。タイマーがオフになる前にマウス ホイール イベントが再び発生した場合は、タイマーをリセットし、カウンターをインクリメントします。 (あなたが何かをしたので、ホイールイベントの数を追跡するために)2番目の(長い)タイマーを開始します。カウンターが特定のしきい値よりも大きい場合は、機能 2 を実行します。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;
}