有没有什么办法捕捉鼠标滚轮开始和停止之间的时间间隔?其实我想捕捉滚动开始和停止之间的间隔,当我非常快速地滚动鼠标滚轮。鼠标滚轮滚动 - 如何捕获滚动开始和停止之间的时间间隔?
我已经看过MouseWheel事件,但它不符合我的要求。在它总是给Delta 120或-120的价值,但我想调用一个函数,取决于鼠标滚动的速度,例如,当我通常滚动鼠标我想执行函数1,当我滚动鼠标非常快速我想执行的功能2.换句话说,有什么办法来区分鼠标滚动高和正常速度。
任何意见将不胜感激。
有没有什么办法捕捉鼠标滚轮开始和停止之间的时间间隔?其实我想捕捉滚动开始和停止之间的间隔,当我非常快速地滚动鼠标滚轮。鼠标滚轮滚动 - 如何捕获滚动开始和停止之间的时间间隔?
我已经看过MouseWheel事件,但它不符合我的要求。在它总是给Delta 120或-120的价值,但我想调用一个函数,取决于鼠标滚动的速度,例如,当我通常滚动鼠标我想执行函数1,当我滚动鼠标非常快速我想执行的功能2.换句话说,有什么办法来区分鼠标滚动高和正常速度。
任何意见将不胜感激。
你不能捕获鼠标滚轮事件,看看它们之间有多长时间。基本上,当你得到一个鼠标滚轮事件时启动一个计时器,然后在下一个事件中看到计时器在什么位置(以及事件之间已经过了多长时间),以确定车轮正在转向的速度?如果经过时间小于某个阈值,则执行功能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;
}
看看在Control.MouseWheel事件。
我已经看过它,但它不符合我的要求。在它总是给Delta 120或-120的价值,但我想调用一个函数,取决于鼠标滚动的速度,例如,当我通常滚动鼠标我想执行函数1,当我滚动鼠标非常快速我想执行的功能2.换句话说,有什么办法来区分鼠标滚动高和正常速度。 – 2010-05-19 14:56:00
正如萨姆持有我在这里发表自己的意见的修改优化版本,以帮助面临同样的问题其他程序员建议。
public partial class Form1 : Form
{
int m_counter = 0;
public Form1()
{
InitializeComponent();
// Attach Mouse Wheel Event
this.MouseWheel += new MouseEventHandler(Form1_MouseWheel);
}
void Form1_MouseWheel(object sender, MouseEventArgs e)
{
// Refresh Slow Timer
slowTimer.Enabled = false;
slowTimer.Stop();
slowTimer.Interval = 150;
slowTimer.Start();
slowTimer.Enabled = true;
// Incremenet counter
m_counter++;
// Start Fast Timer
if (fastTimer.Enabled == false)
{
fastTimer.Enabled = true;
fastTimer.Interval = 50;
fastTimer.Start();
}
// If this returns true call
// the fast scroll implementation
if (m_counter > 4)
{
Console.WriteLine("Quick Method Called");
m_counter = 0;
fastTimer.Stop();
slowTimer.Enabled = false;
slowCheckTimer.Stop();
slowCheckTimer.Interval = 200;
slowCheckTimer.Start();
slowCheckTimer.Enabled = true;
}
}
private void slowTimer_Tick(object sender, EventArgs e)
{
if (slowCheckTimer.Enabled == false)
{
Console.WriteLine("Slow Method Called");
}
slowTimer.Enabled = false;
}
private void fastTimer_Tick(object sender, EventArgs e)
{
fastTimer.Enabled = false;
m_counter = 0;
fastTimer.Stop();
}
private void slowCheckTimer_Tick(object sender, EventArgs e)
{
slowCheckTimer.Stop();
slowCheckTimer.Enabled = false;
}
}
你能指点我一个这样的东西的例子,因为我想这样做为每个滚动不是每个车轮转动,即一个完整的快速滚动后,我想刷新计时器。 – 2010-05-19 15:16:59
你能否清楚“那么如果定时器关闭执行功能1”那个定时器的间隔是多少?谢谢你的帮助。 – 2010-05-19 15:28:17
我没有一个例子,我只是提出了一个解决方案。您无法从单个事件中判断车轮转向的速度,您需要有多个事件来确定车轮是快速还是缓慢转弯。我建议先设置一些东西来确定两个事件之间的时间间隔,如果它<某个值,则向控制台“快速”打印,如果>某个值打印“慢” – 2010-05-19 15:42:00