Что не так с моим обратным вызовом ListView для получения подпунктов? - PullRequest
0 голосов
/ 24 мая 2009

Я пытаюсь получить SubItem в моем ListView из другого потока, но я продолжаю получать Item вместо SubItem. Я не уверен, как правильно это кодировать. Ниже код, который я использую:

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

1 Ответ

1 голос
/ 24 мая 2009

Код всегда получает основной текст ListViewItem, потому что вы каждый раз возвращаете SubItem.Item (0) для X-го элемента. SubItem.Item (0) - текстовое поле элемента. Если вы хотите получить только первый подэлемент, измените SubItem.Item (0) на SubItems.Item (1). Если вы хотите получить произвольный подпункт, см. Пример ниже.

Из 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
...