2009-05-24 4 views
0

J'essaie de récupérer le SubItem dans ma ListView à partir d'un autre thread, mais je continue à obtenir l'élément à la place du SubItem. Je ne suis pas sûr de savoir comment coder cela correctement. Voici le code que je utilise:Qu'est-ce qui ne va pas avec mes sous-éléments ListView Callback?

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 

Répondre

1

Le code est que jamais obtenir le texte principal du ListViewItem parce que vous retournerez SubItem.Item (0) pour l'élément Xème à chaque fois. SubItem.Item (0) est le champ de texte de l'élément. Si vous souhaitez uniquement obtenir le premier sous-élément, modifiez SubItem.Item (0) à SubItems.Item (1). Si vous voulez obtenir un sous-élément arbitraire, reportez-vous à l'exemple ci-dessous.

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

Merci pour l'info ... Parfois, le code de doigts alors que le cerveau n'est pas engagé! – JFV

Questions connexes