【问题标题】:PictureBox.OnMouseDown not called when key is being pressed?按下键时不调用 PictureBox.OnMouseDown?
【发布时间】:2014-04-17 08:23:51
【问题描述】:

我继承了PictureBox 为其添加了一些额外的功能。我正在处理鼠标按下,如下所示:

protected override void OnMouseDown(MouseEventArgs e)
{
    base.OnMouseDown(e);
}

现在,如果我按下一个键(例如“T”)并同时用鼠标单击,OnMouseDown 将被调用!如果我不按任何键,它确实被调用了。 发生了什么事?

当然,我继承了PictureBox,但这种行为毫无意义。

更新

我发现这发生在整个系统中。我忘了提到我正在使用触摸板(多点触控)。在控制面板中,我可以看到“Synaptics ClickPad V8.1”。我相信系统中有一些设置会在打字时禁用鼠标/触摸板。不过还在找。

【问题讨论】:

  • 您在某处有处理按键/按下按键的处理程序吗?处理程序在单线程中执行,因此当一个正在运行时,其他处理程序无法启动。
  • 为我工作。您有其他东西阻碍或直接拦截事件。
  • 直接 PictureBox 是否适合您?如果不是,请在测试项目中尝试 PictureBox,如果是,请慢慢添加继承的东西,直到找到破坏它的地方。

标签: c# winforms


【解决方案1】:

有很多方法可以引发类似的事情,例如锁定线程、执行一些取消鼠标事件的操作或提升/关闭 CPU 周期。

我怀疑你在某处挂钩了一些 key 事件,所以在该关键事件的末尾添加Application.DoEvents();,它应该会执行并发事件。

作为警告,DoEvents 主要用于特定情况,因为通常会导致延迟并且这并不是最好的方法,您应该找到一种方法在单独的情况下执行事件/动作线程,或者,也许,使用辅助标志来识别协作任务。

【讨论】:

    【解决方案2】:

    zeel 的回答 here 成功了。基本上,您需要在 Windows 8 中禁用点击延迟。然后它就可以工作了!

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 2015-08-22
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多