DataGridView上的工具提示

mad*_*lan 2 vb.net

在我的DataGridView中将鼠标悬停在一行上时,我显示了一个工具提示 - 除了工具提示在显示它的行上闪烁时,工作效果很好.

Private Sub DataGridView1_MouseHover(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseMove
    Dim hit As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y)

    If hit.Type = DataGridViewHitTestType.Cell Then

        If Not hit Is m_HoveredItem Then
            Me.ToolTip2.Hide(Me.DataGridView1)
            m_HoveredItem = hit
            If hit Is Nothing Then
                Me.ToolTip2.SetToolTip(Me.DataGridView1, "")
            Else
                'Me.ToolTip2.SetToolTip(Me.DataGridView1, ConnectedUsers(Me.DataGridView1.Rows(hit.RowIndex).Cells("Database").Value, Instance))
                Me.ToolTip2.Show(ConnectedUsers(Me.DataGridView1.Rows(hit.RowIndex).Cells("Database").Value, Instance), DataGridView1, e.X, e.Y)
            End If
        End If

    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

我使用类似的ListView方法,效果很好:

Private m_HoveredItem As ListViewItem
Private Sub lv_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

Dim lvi As ListViewItem = Me.LVDatabases.GetItemAt(e.X, e.Y)

If Not lvi Is m_HoveredItem Then
    Me.ToolTip2.Hide(Me.LVDatabases)
    m_HoveredItem = lvi
    If lvi Is Nothing Then
        Me.ToolTip2.SetToolTip(Me.LVDatabases, "")
    Else
        Me.ToolTip2.SetToolTip(Me.LVDatabases, ConnectedUsers(Me.LVDatabases.GetItemAt(e.X, e.Y).Text, Instance))
    End If
End If
End Sub
Run Code Online (Sandbox Code Playgroud)

mad*_*lan 5

Private cellColumnIndex As Integer = -1, cellRowIndex As Integer = -1
Private Sub testDataGridView_CellMouseMove(ByVal sender As Object, ByVal e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseMove
    If e.ColumnIndex <> Me.cellColumnIndex OrElse e.RowIndex <> Me.cellRowIndex Then
        Me.ToolTip2.Hide(Me.DataGridView1)
        Me.cellColumnIndex = e.ColumnIndex
        Me.cellRowIndex = e.RowIndex
        If Me.cellColumnIndex >= 0 AndAlso Me.cellRowIndex >= 0 Then
            Me.ToolTip2.SetToolTip(Me.DataGridView1, ConnectedUsers(Me.DataGridView1.Rows(e.RowIndex).Cells("Database").Value, Instance))
        End If
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)