【问题标题】:Unexpected output from checking if mouse within control检查鼠标是否在控制范围内的意外输出
【发布时间】:2015-08-31 05:43:26
【问题描述】:

我正在使用 winForm 按钮实现一个自定义拖放界面,在查看了几个关于如何获取鼠标位置并检查它是否与控件绑定的解决方案后,我无法让它工作。

我试过了:

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

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

这两个都失败了。检查鼠标边界看起来是一个简单的操作,但我真的很难过。

我对意外值的推测是:

  1. 获取光标位置的过程可能在光标图像的错误角落
  2. 方法/功能由于某种原因在按钮上不起作用

【问题讨论】:

    标签: c# winforms button bounds aabb


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,有道理,我在使用 PointToClient 和整个“相对论立场”方面并没有太多经验,所以这更有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2023-04-03
    • 2017-07-13
    • 2021-04-05
    相关资源
    最近更新 更多