2009-05-24 6 views
0

Ich versuche, das SubItem in meinem ListView von einem anderen Thread abzurufen, aber ich bekomme das Item anstelle des SubItem. Ich bin mir nicht sicher, wie ich das richtig programmieren soll. Unten ist der Code Ich verwende:Was ist los mit meinen ListView Callback-Abrufunterpositionen?

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 

Antwort

1

Der Code immer nur, um den Haupttext des ListViewItem bekommen, weil Sie jedes Mal SubItem.Item (0) für den X-te Einzelteil zurückbringen. SubItem.Item (0) ist das Textfeld des Elements. Wenn Sie nur den ersten Unterpunkt erhalten möchten, ändern Sie das SubItem.Item (0) in SubItems.Item (1). Wenn Sie einen beliebigen Unterpunkt erhalten möchten, sehen Sie das Beispiel unten.

Von 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

Danke für die Info ... Manchmal ist der Finger-Code, während das Gehirn nicht aktiviert ist! – JFV