2017-03-14 33 views
0

我有一個包含文件(來自用戶系統)和目標地址(兩列,多重選擇= false)的源地址的列表視圖。在列表視圖中選擇項目時更改工具提示文本

由於源地址可能是相當長的,如:

d:\ ROOT \ 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 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 

我仍然對第一種方法中的跳過感到困惑。

回答

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 
+0

我需要** View.Details **作爲視圖設置。 你的建議只適用於** View.List **模式。 我不好,我不是更具體 – Caligola

相關問題