ListView: visualizzare un ToolTip anche per i SubItem

Per impostazione predefinita se il ListView è impostato in modalità tabella (View = Detail) se si imposta di mostrare il ToolTip per gli item (ShowItemToolTips = True), questo verrà visualizzato solo sulla prima colonna o sulle colonne in cui il testo eccede la lunghezza.

Un modo veloce per visualizzate il ToolTip su tutte le colonne è quello di aggiungere alla Form un componente ToolTip, nel mio esempio tltListView e di gestirne la visualizzazione per le colonne diverse dalla prima (SubItem con indice diverso da 0) nell’evento MouseMove del ListView:

Private Sub lsvSystemInformation_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lsvSystemInformation.MouseMove
    If Me.lsvSystemInformation.Items.Count = 0 Then Return

    Dim ht = Me.lsvSystemInformation.HitTest(e.Location)

    If ht.Item IsNot Nothing AndAlso _
        Not String.IsNullOrEmpty(ht.Item.ToolTipText) AndAlso _
        ht.SubItem IsNot Nothing AndAlso _
        ht.Item.SubItems(0) IsNot ht.SubItem Then

        Me.tltListView.Show(ht.Item.ToolTipText, _
            Me.lsvSystemInformation, _
            e.Location.X, _
            ht.SubItem.Bounds.Bottom + ht.SubItem.Bounds.Height)
    Else
        Me.tltListView.Hide(Me.lsvSystemInformation)
    End If
End Sub

In realtà l’effetto non sarà perfetto perchè il ToolTip del ListView ha un’altezza maggiore.

image

image