如何修复事件延迟

时间:2012-11-25 18:37:02

标签: c# event-handling hover

我正在为学校项目制作一个表预订系统,我正在使用PictureBoxes列表来表示这些表。 对于这些PictureBox我已经链接了一个悬停事件,当我悬停时,BackColor属性被更改。

List<PictureBox> pb = new List<PictureBox> { pictureBox1, pictureBox2, pictureBox3};

foreach (PictureBox p in pb)
{
    p.BorderStyle = BorderStyle.Fixed3D;
    p.BackColor = Color.White;
    p.MouseHover += new EventHandler(mouseOn);
}

private void mouseOn(object sender, EventArgs e)
{
    ((PictureBox)sender).BackColor = Color.Green;
}

一切都很好,除了当我将鼠标悬停在触发事件之前需要1秒时,是否有任何方法可以立即触发事件?

2 个答案:

答案 0 :(得分:2)

如果您想立即触发事件,请改用MouseEnter事件。根据设计,您的鼠标应保持静止一段时间才能触发MouseHover事件。

BTW SystemInformation.MouseHoverTime认为MouseHover事件有延迟。

答案 1 :(得分:1)

  

一切都很好,除了当鼠标悬停时,触发事件前需要1秒

这就是定义Control.MouseHover的方式:

  

当鼠标指针停留在控件上时发生。

“休息”部分是一秒钟的延迟。我不知道有任何方法可以调整鼠标在作为悬停计数之前必须停留的时间长度。

如果你不想要任何延迟 - 也就是说你希望一旦鼠标进入控件区域就会引发一个事件 - 你应该使用Control.MouseEnter代替。

从两个事件的文档中:

  

鼠标事件按以下顺序发生:

     
      
  • 的MouseEnter

  •   
  • 的MouseMove

  •   
  • MouseHover / MouseDown / MouseWheel

  •   
  • 的MouseUp

  •   
  • 鼠标离开

  •