即使未移动鼠标,PictureBox中的MouseMove事件也会连续触发

Set*_*o N 6 .net c# picturebox mousemove winforms

为什么即使鼠标没有移动,PictureBox的MouseMove事件似乎也会连续触发?我已经尝试了以下代码来证明它(通过简单地创建一个带有PictureBox和Label的新表单).

private void pictureBox1_MouseMove ( object sender, MouseEventArgs e )
{
  label1.Text = DateTime.Now.ToLongTimeString ( ) + ": " + e.X + "," + e.Y;
}
Run Code Online (Sandbox Code Playgroud)

Nil*_*oCK 5

某些涉及 Windows 窗体的方法会导致窗体的某种程度的内部刷新,(据我估计)这会导致窗体“拾取”鼠标位置,从而触发 MouseMove 事件。一种这样的方法是将工具提示与表单相关联。其结果,

int moveCount = 0;
ToolTip toolTip = new ToolTip();
private void form1_MouseMove(object sender, MouseEventArgs e)
{
    Trace.WriteLine(moveCount);
    moveCount++;
    toolTip.SetToolTip(this, "Hello world");
}
Run Code Online (Sandbox Code Playgroud)

即使鼠标没有移动,也会连续发射,而

int moveCount = 0;
private void form1_MouseMove(object sender, MouseEventArgs e)
{
    Trace.WriteLine(moveCount);
    moveCount++;
}
Run Code Online (Sandbox Code Playgroud)

只有当鼠标实际移动时才会触发。

查看 MouseMove 事件内部以“深入”方式接触表单的内容可能有助于揭示循环行为的来源。


RTh*_*mas 1

首先猜测...要么是地震活动,要么是水怪——我怀疑水怪:)。

使用您提供的代码示例我没有得到相同的行为。我的标签仅在鼠标实际移动时更新。(并且指针必须位于图片框上方才能启动)。

但说实话……你的桌子有震动吗?我也可能会尝试另一个鼠标 - 因为内部电路可能会发送错误的数据。