在listview中选择项目时更改工具提示文本

时间:2017-03-14 17:55:04

标签: vb.net

我有一个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

我仍然对第一种方法中的跳过感到困惑。

1 个答案:

答案 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