1

我正在为一个学校项目制作一个餐桌预订系统,并且我正在使用一个 PictureBoxes 列表来表示这些桌子。这些 PictureBoxes 我已经链接了一个悬停事件,当我悬停时,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 秒钟,有什么方法可以立即触发事件?

4

2 回答 2

4

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

顺便说一句 ,事件SystemInformation.MouseHoverTime的延迟。MouseHover

于 2012-11-25T18:40:51.510 回答
1

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

就是这样Control.MouseHover定义的:

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

“休息”部分是一秒钟的延迟。我不知道有什么方法可以调整鼠标在鼠标悬停之前必须停留在控件上的时间长度。

如果您不想要任何延迟 - 即您想要一个在鼠标进入控件区域后立即引发的事件 - 您应该使用它Control.MouseEnter

从两个事件的文档中:

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

  • 鼠标回车

  • 鼠标移动

  • MouseHover / MouseDown / MouseWheel

  • 鼠标向上

  • 鼠标离开

于 2012-11-25T18:41:43.053 回答