i有一个listView,其中包含文件的源地址(来自用户系统)和目标地址(两列,多元素选择= false)。
由于源地址可能很长:
d: root branch1 branch2 branch3 branch4 myfile.dat
第一列仅显示:
d: ... myfile.dat
真实路径存储在listViewItem.tag
中我想拥有一个工具提示,每次用户单击(或更改)所选项目时,显示整个路径。我提出了这个:
Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
For Each locItem As ListViewItem In ListView1.SelectedItems
With ToolTip1
.RemoveAll()
.SetToolTip(ListView1, locItem.Tag)
End With
Next
End Sub
现在,工具提示确实会更改,但它总是跳过一个选择。那就是:
选择项目1:工具提示正确显示
选择项目2:工具提示不显示
选择项目3:工具提示正确显示
选择项目5:工具提示不显示
选择项目2:Tooltip正确显示(选择返回第2项未显示第一次的项目)
有什么想法吗?
ps:我正在使用Visual Studio社区2015
pps:我还需要将视图属性设置为view.details(要显示列和标题),因此设置ShowItemToolTip = True
不起作用
当前解决方案
我找到了解决方法,破坏和重新创建了工具提示控制。现在,该工具提示在每个项目上都正确显示:
Private myTooltip As ToolTip
Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
If myTooltip IsNot Nothing Then myTooltip.Dispose()
myTooltip = New ToolTip
For Each locItem As ListViewItem In ListView1.SelectedItems
myTooltip.SetToolTip(ListView1, locItem.Tag)
Next
End Sub
我仍然对第一种方法中的跳过感到困惑。
listView具有一个名为Showitemtooltips(https://msdn.microsoft.com/en-us/library/system.windows.forms.listview.showitemtooltips(V=VS.110)的属性.aspx)。您可以将其设置为True,然后将ListViewItems的ToolPtext属性设置为长路径。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
ListView1.ShowItemToolTips = True
Dim lvi1 As New ListViewItem With {.Text = "d:..myFile.dat", .Tag = "d:myLongPathmyFile.dat", .ToolTipText = .Tag}
Dim lvi2 As New ListViewItem With {.Text = "d:..myFile2.dat", .Tag = "d:myLongPathmyFile2.dat", .ToolTipText = .Tag}
ListView1.Items.Add(lvi1)
ListView1.Items.Add(lvi2)
End Sub