views:

244

answers:

1

I'm trying to retrieve 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 properly. Below is the code I'm 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

Any and all help appreciated!

-JFV

+1  A: 

The code is only ever getting the main text of the ListViewItem because you are returning SubItem.Item(0) for the Xth item every time. SubItem.Item(0) is the Item's Text field. If you only ever want to get the 1st subitem, then change the SubItem.Item(0) to SubItems.Item(1). If you want to get an arbitrary subitem, 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
Joe Doyle
Thanks for the info... Sometimes the fingers code while the brain is not engaged!
JFV