Подсказка ListView только в первой ячейке - VB.NET - PullRequest
0 голосов
/ 15 апреля 2010

Я добавляю всплывающую подсказку к ListViewItem. Однако всплывающая подсказка отображается только тогда, когда пользователь наводит курсор на первую ячейку в строке, к которой была применена всплывающая подсказка.

MyListViewItem.ToolTipText = "Important Message"

Единственный другой код, который я имел отношение к всплывающим подсказкам, это:

MyListView.ShowItemToolTips = True

Есть идеи, как заставить всплывающую подсказку отображаться в определенной ячейке подряд или даже во всей строке? Спасибо.

1 Ответ

1 голос
/ 16 апреля 2010

Если вам нужен ответ без оболочки, в отличие от упомянутого дубликата, попробуйте следующее:

Свойство listview FullrowSelect должно быть истинным. Далее вам нужно сохранить подсказки для каждого подпункта, я делаю это внутри свойства тега subitem. Что вы хотите сделать, так это событие listm mousemove, вы берете элемент под мышью, получаете его подэлемент и используете этот совет.

В этом простом примере показано, как получить всплывающую подсказку, вы можете просто немного ее взломать в соответствии со своими потребностями.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    lvw.ShowItemToolTips = True
    lvw.Columns.Add("Column A")
    lvw.Columns.Add("Column B")
    lvw.Columns.Add("Column C")
    lvw.Items.Add(New ListViewItem(New String() {"Colors", "Green", "Blue"}))
    lvw.Items(0).SubItems(0).Tag = "See the other columns"
    lvw.Items(0).SubItems(1).Tag = "Like grass"
    lvw.Items(0).SubItems(2).Tag = "Like the sky"
End Sub

Function GetItemTip(ByVal list As ListView, ByVal e As System.Windows.Forms.MouseEventArgs) As String
    Dim item As ListViewItem = list.GetItemAt(e.X, e.Y)
    If Not IsNothing(item) Then
        Dim si As ListViewItem.ListViewSubItem
        si = item.GetSubItemAt(e.X, e.Y)
        If Not IsNothing(si) Then
            Return si.Tag.ToString
        Else
            Return ""
        End If
    Else
        Return ""
    End If
End Function

Private Sub lvw_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lvw.MouseMove
    Me.Text = GetItemTip(CType(sender, ListView), e)
End Sub
...