C# 检查鼠标是否在控制范围内时出现意外输出

C# 检查鼠标是否在控制范围内时出现意外输出,c#,winforms,button,bounds,aabb,C#,Winforms,Button,Bounds,Aabb,我正在用winForm按钮实现一个自定义的拖放界面,在查看了一些关于如何获取鼠标位置和对照控件绑定检查鼠标位置的解决方案之后,我还没有能够使它工作 我试过: button.ClientRectangle.Contains(PointToClient(Cursor.Position)) 及 这两种方法都失败了。检查鼠标边界似乎是一个简单的操作,但我真的被难倒了 我对意外值的推测如下: 获取光标位置的过程可能位于光标图像的错误角落 由于某些原因,方法/函数在按钮上不起作用 您使用了错误的对象引用,

我正在用winForm按钮实现一个自定义的拖放界面,在查看了一些关于如何获取鼠标位置和对照控件绑定检查鼠标位置的解决方案之后,我还没有能够使它工作

我试过:

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

这两种方法都失败了。检查鼠标边界似乎是一个简单的操作,但我真的被难倒了

我对意外值的推测如下:

  • 获取光标位置的过程可能位于光标图像的错误角落
  • 由于某些原因,方法/函数在按钮上不起作用

  • 您使用了错误的对象引用,计算鼠标相对于窗体而不是按钮的位置。您编写它的方式使得调试非常困难。修正:

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

    啊,这是有道理的,我在使用PointToClient和整个“相对论位置”方面没有太多经验,所以这更有意义。
    var pos = button.PointToClient(Cursor.Position);
    System.Diagnostics.Debug.WriteLine(pos);         // Now it is easy
    if (button.ClientRectangle.Contains(pos)) {
        // etc...        
    }