首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >鼠标光标下的工具提示-闪烁

鼠标光标下的工具提示-闪烁
EN

Stack Overflow用户
提问于 2016-08-05 10:43:39
回答 1查看 998关注 0票数 0

我已经在鼠标光标下设置了工具提示,但是它一直在闪烁,即使光标没有移动。关于如何防止工具提示闪烁,有什么想法吗?

代码:

代码语言:javascript
复制
   Private Sub DataGridView1_MouseHover(sender As Object, e As EventArgs) Handles DataGridView1.MouseHover


        Dim cur = DataGridView1.HitTest(e.X, e.Y)

        If cur.RowIndex >= 0 AndAlso cur.ColumnIndex >= 0 Then

            DataGridView1.Cursor = Cursors.Help

            ToolTip1.Active = True
            Dim cp = Cursor.Position
            cp.Y += CInt(Cursor.Size.Height * 0.2)
            cp.X += CInt(Cursor.Size.Width * 0.8)
            ToolTip1.Show("Details...", Me, PointToClient(cp))

        Else
            DataGridView1.Cursor = Cursors.Default
            ToolTip1.Active = False
        End If

    End Sub 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-05 11:49:01

经过一些测试,一旦显示了ToolTip,DataGridView就会暂时失去焦点。当它重新获得焦点时,将再次调用MouseMove事件,这将导致ToolTip再次关闭并重新释放自身,因此它将无限地占用CPU和一些内存,直到您将鼠标移出一个单元格。

解决这一问题的最简单方法是让它检查自上次调用MouseMove以来鼠标是否移动,然后只有在鼠标移动了ToolTip 时才重新运行

我使用CellMouseMoveCellMouseLeave事件来保存鼠标是否位于单元格上的附加检查:

代码语言:javascript
复制
Dim PreviousCursorPos As New Point(-1, -1)

Private Sub DataGridView1_CellMouseMove(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseMove
    If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 AndAlso _
        PreviousCursorPos <> Cursor.Position Then 'If the mouse is not in the same position as before, then execute the code.

        DataGridView1.Cursor = Cursors.Help
        ToolTip1.Active = True

        Dim cp = Cursor.Position
        cp.Y += CInt(Cursor.Size.Height * 0.2)
        cp.X += CInt(Cursor.Size.Width * 0.8)

        ToolTip1.Show("Details...", Me, Me.PointToClient(cp))

        PreviousCursorPos = Cursor.Position
    End If
End Sub

Private Sub DataGridView1_CellMouseLeave(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellMouseLeave
    DataGridView1.Cursor = Cursors.Default
    ToolTip1.Active = False
End Sub

当移动鼠标时,ToolTip会闪烁一点,但是一旦它仍然存在,就不会有问题了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38787300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档