【发布时间】:2016-06-03 16:46:53
【问题描述】:
我是新的 C#,我正在使用 Windows 窗体。我构建了一个应用程序,如果鼠标使用计时器停止(没有活动正在进行)5 秒,并且当鼠标移动时计时器被重置,我想在其中显示按摩。
我有 Form1 和一些控件(Buttons 和 TextBoxes)和 Timer。我只是想做一个屏幕保护程序之类的事情,所以当Form1 加载并且在一定时间内没有活动(鼠标停止)时,必须采取行动(例如显示消息)。
我尝试了以下代码(作为示例),但效果不佳,当Form1 加载计时器开始计数时,如果我移动鼠标(在i == 5 之前),计时器将重置并且它永远不会再次开始计数.
int i = 0;
private void Form1_Load(object sender, EventArgs e)
{
timer1.Start();
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
i = 0;
timer1.Stop();
textBox1.Text = i.ToString();
}
private void Form1_MouseHover(object sender, EventArgs e)
{
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
i = i + 1;
textBox1.Text = i.ToString();
if(i==5)
{
MessageBox.Show("Time is over");
}
}
我不知道我是否使用了正确的鼠标事件,我什至不知道在这种情况下使用这些事件是否正确。如果鼠标 5 秒没有移动,如何显示消息?
【问题讨论】:
-
而不是 MouseHover 事件将
timer1.Start();直接放在 MouseMove 事件的末尾... -
您必须查看鼠标的位置。你怎么知道它是否移动了?如果位置相同,则说明它没有移动。
-
btw HanletEscano 在效率方面提出了更好的解决方案...
-
您忘记再次调用 timer1.Start()。这不是正确的做法,您需要实现 IMessageFilter 以便您可以看到 every 移动。 Like this.
标签: c#