我有一个使用 VB.Net 在Framework 2.0中开发的 WinForm 应用程序,它在所有 ListView 对象上使用事件 MouseMove 来在 ListViews 的第一行显示 ToolTip 文本 - 因为据我所知,ColumnHeader 上不可能有 ToolTips知道,无需第三方工具。
问题是,由于我将应用程序转换为 Framework 4.0,因此这个“技巧”不起作用,并且不再显示工具提示。
有谁知道解决方案,或者更好的是在 ListView ColumnHeaders 上显示工具提示的方法?
这是我的代码片段:
Private Sub ShowTooltip(ByVal sender As Object, ByVal e As MouseEventArgs)
Handles myListView.MouseMove
Dim iColumn As System.Int32 = FindListViewColumnHeader(e.X, e.Y)
If Me.myListView.Columns.Count > 0 AndAlso iColumn >= 0 AndAlso
iColumn <= Me.myListView.Columns.Count - 1 Then
Me.myToolTip.Active = True
Me.myToolTip.UseAnimation = True
Me.myToolTip.UseFading = True
Me.myToolTip.AutomaticDelay = 10000
Me.myToolTip.AutoPopDelay = 10000
Me.myToolTip.InitialDelay = 0
Me.myToolTip.ReshowDelay = 2000
Dim sTooltipText As System.String = SomeText(...)
If sTooltipText <> DirectCast(Me.myToolTip.Tag, System.String) Then
Me.myToolTip.Tag = sTooltipText
Me.myToolTip.SetToolTip(Me.myListView, sTooltipText)
End If
Else
Me.myToolTip.Active = False
End If
End Sub
Protected Overridable Function FindListViewColumnHeader(ByVal X As System.Int32,
ByVal Y As System.Int32) As System.Int32
If Y > 20 And Y < 40 Then
Dim iCount As System.Int32
Dim iLeft As System.Int32
For iCount = 0 To myListView.Columns.Count - 1
iLeft = iLeft + myListView.Columns(iCount).Width
If X <= iLeft Then
Return iCount
Exit For
End If
Next
Return iCount
Else
Return -1
End If
End Function
注意:myToolTip 是
Friend WithEvents myToolTip As System.Windows.Forms.ToolTip
而 myListView 是
Protected WithEvents myListView As System.Windows.Forms.ListView
请注意,正如问题中所建议的:
如何为 ListviewItem 设置工具提示,ShowItemToolTips
已设置为 True。