代码之家  ›  专栏  ›  技术社区  ›  madlan

DataGridView上的工具提示

  •  2
  • madlan  · 技术社区  · 14 年前

    当鼠标悬停在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
    

    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
    
    3 回复  |  直到 14 年前
        1
  •  5
  •   madlan    14 年前
    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
    
        2
  •  3
  •   Ramanathan RM    11 年前

    要使datagridview显示tooltiptext,应将属性“showcelltooltips”设置为false,然后只显示工具提示文本

        3
  •  2
  •   cdkMoose    13 年前

    FWIW,我相信这是Windows7上DataGridView的一个错误。我们在WindowsXP上用C编写的应用程序中使用了这种技术。一切正常,但当我们将应用程序移到Windows7时,我们注意到了这个闪烁的问题。经过调查,我们发现重复调用MouseMove事件处理程序。我在处理程序的顶部添加了一条简单的跟踪线,它刚刚报告了事件触发时鼠标的位置,即e.X和e.Y。我们看到在同一点上不断重复执行,甚至当把鼠标的手从桌子上拿开,把椅子从桌子上拿开时也是如此。

    .Net 3.5客户端配置文件,C#WinForms应用程序