【问题标题】:How to fix the event delay如何修复事件延迟
【发布时间】:2012-11-25 18:37:02
【问题描述】:

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

【问题讨论】:

    标签: c# event-handling hover


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      Control.MouseHover 就是这样定义的:

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

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

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

      来自两个事件的文档:

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

      • 鼠标输入

      • 鼠标移动

      • MouseHover / MouseDown / MouseWheel

      • 鼠标移动

      • 鼠标离开

      【讨论】:

        猜你喜欢
        • 2016-08-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-23
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多