What's wrong with my ListView callbacks?
I am trying to get the SubItem in my ListView from another thread, but I keep getting the Item instead of the SubItem. I'm not sure how to code this correctly. Below is the code I am using:
Delegate Function lvExtractedCallback(ByVal x As Integer) As String
Private Function lvExtracted(ByVal x As Integer) As String
Static Dim lvName As String
If Me.OptionsList.InvokeRequired Then
Dim lvEC As New lvExtractedCallback(AddressOf lvExtracted)
Me.Invoke(lvEC, (New Object() {x}))
Else
lvName = OptionsList.Items.Item(x).SubItems.Item(0).Text
End If
Return lvName
End Function
Private Sub GetSubItem()
Dim subItemText as String
For i as Integer = 0 to 15
subItemText = lvExtracted(x)
Debug.Print subItemText
Next
End Sub
0
a source to share
1 answer
The code only gets the main text of the ListViewItem because you are returning SubItem.Item (0) for the Xth item every time. SubItem.Item (0) - Text Item field. If you only want to get the first subitem, change SubItem.Item (0) to SubItems.Item (1). If you want to get an arbitrary sub, see the example below.
From MSDN:
The first subitem in the ListViewItem::ListViewSubItemCollection is always
the item that owns the subitems. When performing operations on subitems in the
collection, be sure to reference index position 1 instead of 0 to make changes
to the first subitem.
Exmaple:
Delegate Function lvExtractedCallback(ByVal x As Integer, ByVal y As Integer) As String
Private Function lvExtracted(ByVal x As Integer, ByVal y As Integer) As String
Static Dim lvName As String
If Me.OptionsList.InvokeRequired Then
Dim lvEC As New lvExtractedCallback(AddressOf lvExtracted)
Me.Invoke(lvEC, (New Object() {x, y})) '<-- This may need to be fixed, I'm rusty at VB.
Else
lvName = OptionsList.Items.Item(x).SubItems.Item(y).Text
End If
Return lvName
End Function
+1
a source to share