0

我正在尝试确定 ToolStripMenuItem 的 MouseHover 事件中的当前鼠标位置。我正在使用 Cursor.Current.Position 属性来完成此操作。

这是预期的代码:

    Private Sub pbNotesFlag_MouseHover(sender As Object, e As EventArgs)
        pbNotesFlagToolTip.Location = New Point(Cursor.Position.X, Cursor.Current.Position.Y)   'New Point(pbNotesFlag.Location.X - 20, pbNotesFlag.Location.Y + 15)
        pbNotesFlagToolTip.Visible = True
        pbNotesFlagToolTip.BringToFront()
    End Sub

问题是我收到以下错误:

Access of shared member, constant member, enum member or nested type through an instance; qualifying types will not be evaluated.

在网上研究了这个之后,我发现流行的观点是Cursor引用应该是完全限定的,所以我将代码更改如下:

    Private Sub pbNotesFlag_MouseHover(sender As Object, e As EventArgs)
        pbNotesFlagToolTip.Location = New Point(System.Windows.Forms.Cursor.Current.Position.X, System.Windows.Forms.Cursor.Current.Position.Y)   'New Point(pbNotesFlag.Location.X - 20, pbNotesFlag.Location.Y + 15)
        pbNotesFlagToolTip.Visible = True
        pbNotesFlagToolTip.BringToFront()
    End Sub

不幸的是,我仍然遇到同样的错误。

我试过改变参考上下文;例如,将引用放在模块而不是类中。到目前为止,我一直无法解决这个错误。

我不确定为什么这个参考不起作用。从表面上看,这似乎是正确用法的教科书示例(根据 MSDN)。

我在这里想念什么?

当然,任何见解和/或建议将不胜感激。

4

1 回答 1

0

第一个代码不起作用,因为表单有一个Cursor属性,并且您对该名称的使用被解释为该属性 - 一个实例 - 而不是类型。第二个代码不起作用,因为您使用类型来获取实例,然后使用它而不是直接使用类型。这个:

System.Windows.Forms.Cursor.Current.Position

应该是这样的:

System.Windows.Forms.Cursor.Position

您也可以省略 ,System因为默认情况下已经导入了该命名空间。鉴于我的评论,您的代码应该是这样的:

 pbNotesFlagToolTip.Location = PointToClient(Windows.Forms.Cursor.Position)
于 2020-04-29T02:17:41.703 回答