我有一个listview,其中包含文件的源地址(来自用户系统)和目标地址(两列,multilpe selection = false)。
由于源地址可能很长,如:
d:\根\ BRANCH1 \ BRANCH2 \店3 \ 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项:工具提示正确显示(选择返回第2项未显示第1次)
有什么想法吗?
PS:我正在使用Visual Studio Community 2015
PPS:我还需要将View属性设置为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
我仍然对第一种方法中的跳过感到困惑。
答案 0 :(得分:0)
ListView有一个名为ShowItemToolTips(https://msdn.microsoft.com/en-us/library/system.windows.forms.listview.showitemtooltips(v=vs.110).aspx)的属性。您可以将其设置为true,然后将ListViewItems的ToolTipText属性设置为长路径。
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:\myLongPath\myFile.dat", .ToolTipText = .Tag}
Dim lvi2 As New ListViewItem With {.Text = "d:\..\myFile2.dat", .Tag = "d:\myLongPath\myFile2.dat", .ToolTipText = .Tag}
ListView1.Items.Add(lvi1)
ListView1.Items.Add(lvi2)
End Sub