【发布时间】:2015-03-02 14:52:49
【问题描述】:
我有一个使用 VB.Net 在 Framework 2.0 中开发的 WinForm 应用程序,它在所有 ListView 对象上使用事件 MouseMove 来在 ListViews 的第一行显示 ToolTip 文本 - 因为这是不可能的据我所知,在没有第三方工具的情况下在 ColumnHeader 上有工具提示。
问题在于,自从我将应用程序转换为 Framework 4.0 后,这个“技巧”不起作用,并且不再显示工具提示。
有谁知道在 ListView ColumnHeaders 上显示工具提示的解决方案,或者更好的方法?
这是我的代码 sn-p:
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
请注意,正如问题中所建议的:
How to set tooltip for a ListviewItem、ShowItemToolTips 已设置为 True。
【问题讨论】:
-
A ColumnHeader 不会生成 MouseMove 或 MouseHover 类型的事件,因此即使 LV 也不知道鼠标在标题部分。事实上,如果您查看对象浏览器,它的唯一事件是
Disposed。 ToolTip 提供程序在ColumnHeader上不起作用,所以我想知道ToolTipText()是什么? ListViewItems 具有该属性,但没有标题。lsRecords也是个谜 -
@Plutonix 代码我认为是可疑的。什么是 lsRecords?看起来应该是 myListView。
-
我更正了代码 sn-p,lsRecords 是一个错误。我的问题是 Framework 4.0 ToolTips 也不适用于 ListViewItems。
-
LVI 有自己的内置 ToolTipText 属性。我看不出它是如何工作的:
DirectCast(Me.myListView.Columns(iColumn), ColumnHeader).ToolTipText()无法编译,因为ColumnHeader上没有ToolTipText -
提供的代码不会在 NET 2.0 中的列标题上显示工具提示。它会在一个项目或子项目上立即显示一个,但当您将鼠标移到标题上时它会立即消失。
标签: vb.net winforms listview columnheader