2013-12-15 119 views
0

我需要一些使用大圖標視圖的listview控件的幫助。我在我的listview控件中有圖標,當我將鼠標懸停在它們上面時,它會顯示一個自定義工具提示(而不是內置的listview工具提示)。在列表視圖背景中懸停時取消選擇listview項目

我的問題是,當我將鼠標懸停在列表視圖的背景中時,它不會取消選擇所選項目。我還希望縮短工具提示(如果可能的話),所以如果工具提示的目的是在5秒內可見並且有人在此時間前懸停在列表視圖的背景中,則會取消選擇該項目並且工具提示消失。

我的代碼目前看起來是這樣的:

Private Sub lsvStores_ItemMouseHover(sender As Object, e As ListViewItemMouseHoverEventArgs) Handles lsvStores.ItemMouseHover 
    Dim storeID As String = e.Item.Name 
    ShowStoreDetailsTooltip(storeID, sender, e.Item.Position.X, e.Item.Position.Y - 80) 
End Sub 

Private Sub lsvStores_MouseHover(sender As Object, e As EventArgs) Handles lsvStores.MouseHover 
    lsvStores.SelectedItems.Clear() 
End Sub 

Private Sub ShowStoreDetailsTooltip(ByVal Code As String, ByVal Obj As Control, ByVal XPos As 
    ttpStoreDetails.ToolTipTitle = StoreName 
    ttpStoreDetails.IsBalloon = True 
    ttpStoreDetails.Show(String.Empty, Obj, 0) 
    ttpStoreDetails.Show(tmpString, Obj, XPos, YPos, 5000) 
End Sub 

任何幫助表示讚賞感謝。

回答

0

使用this answer中的一些代碼,我們可以使用ListView.GetItemAt()獲取當前鼠標光標下的項目,然後查看它是否爲Nothing。如果是這樣,那麼你會做任何你需要的東西來讓你的Tooltip消失。

Private _item As ListViewItem = Nothing 

Private Sub lsvStores_MouseMove(sender As Object, e As MouseEventArgs) Handles lsvStores.MouseMove 
    Dim item As ListViewItem = lsvStores.GetItemAt(e.X, e.Y) 

    If item Is Nothing Then 
     If _item IsNot Nothing Then 
      _item.Selected = False 
     End If 

     _item = Nothing 

     ttpStoreDetails.Hide(sender) 
    End If 
End Sub 
+0

謝謝阿德里安,這已經完成了絕招。剛剛添加一行時,取消選擇所有物品移出物品時。我的問題是,是否可以使用相同的過程(lsvStores_MouseMove)來獲取項目並顯示工具提示,如果鼠標移動到實際項目上,還是需要使用原始ItemMouseHover過程來捕獲選定項目? – Riples

+0

@ user2185200您可以使用相同的方法來捕獲鼠標移過實際項目。在這種情況下,你的'item'不會是'Nothing',因爲在鼠標光標下會有一個實際的'ListViewItem'。但是,這樣做的前提是,當客戶將鼠標懸停在項目上時,它會讓您的工具提示立即顯示出來,而不會像通過懸停一樣拖延。 – Adrian

+0

如果'item'不是什麼,然後顯示工具提示,我試圖放入一個'else'語句,但是每彈動一下工具提示,我都會將鼠標移動到該項目上。我只需要它顯示,而不是每次都刷新。 – Riples