【问题标题】:Receive mouse move even cursor is outside control即使光标不受控制也接收鼠标移动
【发布时间】:2013-01-07 06:51:32
【问题描述】:

我从Control 做了类似滚动条的操作。一切都很好,但是当光标离开控制区域时,不再收到OnMouseMove。

当您使用标准 Windows 滚动条时,即使鼠标光标位于控件表面之外,您也可以使用它。

为了避免这种情况,我唯一的想法是从屏幕上获取光标位置,然后计算屏幕上的滚动条位置,并使用计时器或其他东西来更新我的Control。但这听起来非常困难和丑陋。

知道怎么解决吗?

编辑:我的意思是Control 不是UserControl。

编辑2: 它接收鼠标!我在代码中有错误,我在 MouseMove 方法中调用了 MouseDown,但在 MouseDown 中我有 X/Y 约束,如果 X

【问题讨论】:

  • 即使解决了,当光标移出Form的范围时,你也会遇到同样的问题。
  • 我认为你的问题是关于焦点。标准滚动条只有在获得焦点时才起作用。
  • @KenKin 通过鼠标捕获(请参阅我的回答),即使它在窗口/窗体之外,您也会得到移动
  • 很好。我想说的是,这不仅仅是关于控件,还有表单。

标签: c# winforms mouseevent


【解决方案1】:

您要查找的内容称为mouse capture,并在此处进行了描述:

http://msdn.microsoft.com/en-us/library/ms171545(v=vs.80).aspx

简而言之:

  • 在您的控件中按下鼠标时,您“捕获”了鼠标输入
  • 那么只要没有其他人捕获鼠标,您将收到所有鼠标移动事件,即使是您无法控制的事件
  • 如果不再需要数据,可以释放捕获,可选择在“OnMouseUp”中

【讨论】:

  • 嗯,我看了,还是不明白:/这个捕获属性怎么办?
  • @zgnilec: 看来我的更新 - 基本上你需要在鼠标按下处理代码中设置该属性 true
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2011-05-04
  • 1970-01-01
  • 2018-08-08
  • 2016-09-24
  • 1970-01-01
相关资源
最近更新 更多