检查鼠标是否在控制范围内的意外输出

Unexpected output from checking if mouse within control

我正在使用 winForm 按钮实现自定义拖放界面,在查看了有关如何获取鼠标位置并根据控件绑定检查它的几种解决方案后,我无法使其正常工作。

我试过:

button.ClientRectangle.Contains(PointToClient(Cursor.Position))

button.ClientRectangle.Contains(PointToClient(Control.MousePosition))

这两个都失败了。检查鼠标边界看似简单的操作,但我真的被难住了。

我对意外值的推测是:

  1. 获取光标位置的过程可能在光标图像的错误角落
  2. Method/Function 由于某些原因不适用于按钮

您使用了错误的对象引用,计算的是鼠标相对于表单而不是按钮的位置。而且您正在以一种很难调试的方式编写它。修复:

var pos = button.PointToClient(Cursor.Position);
System.Diagnostics.Debug.WriteLine(pos);         // Now it is easy
if (button.ClientRectangle.Contains(pos)) {
    // etc...        
}