我做了一些类似Control
中的滚动条的事情。一切都很好,但是当光标离开控制区域时,不再收到 OnMouseMove
。
当您使用标准 Windows 滚动条时,即使鼠标光标位于控件表面之外,也可以使用它。
为了避免这种情况,我唯一的想法是从屏幕获取光标位置,然后计算屏幕上的滚动条位置,并使用计时器或其他东西来更新我的Control
。但这听起来非常困难和丑陋。
知道如何修复它吗?
编辑:我的意思是Control
而不是UserControl
。
编辑2: 它接收鼠标!我在代码中遇到错误,我在 MouseMove 方法中调用了 MouseDown,但在 MouseDown 中我有 X/Y 约束,如果 X<0 等,它将强制返回。
最佳答案
您正在寻找的内容称为鼠标捕获
,描述如下:
http://msdn.microsoft.com/en-us/library/ms171545(v=vs.80).aspx
简而言之:
- 在控件中按下鼠标时,您“捕获”鼠标输入
- 那么只要没有其他人捕获鼠标,您就会收到所有鼠标移动事件,甚至是您无法控制的事件
- 如果您不再需要数据,可以释放捕获,可以选择在“OnMouseUp”中释放捕获
关于c# - 即使光标不受控制,也能接收鼠标移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14191219/