我已经在鼠标光标下设置了工具提示,但是它一直在闪烁,即使光标没有移动。关于如何防止工具提示闪烁,有什么想法吗?
代码:
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 发布于 2016-08-05 11:49:01
经过一些测试,一旦显示了ToolTip,DataGridView就会暂时失去焦点。当它重新获得焦点时,将再次调用MouseMove事件,这将导致ToolTip再次关闭并重新释放自身,因此它将无限地占用CPU和一些内存,直到您将鼠标移出一个单元格。
解决这一问题的最简单方法是让它检查自上次调用MouseMove以来鼠标是否移动,然后只有在鼠标移动了ToolTip 时才重新运行。
我使用CellMouseMove和CellMouseLeave事件来保存鼠标是否位于单元格上的附加检查:
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会闪烁一点,但是一旦它仍然存在,就不会有问题了。
https://stackoverflow.com/questions/38787300
复制相似问题