2009-05-24 20 views
0

別のスレッドからListViewのSubItemを取得しようとしていますが、SubItemではなくItemを取得し続けます。私はこれを正しくコーディングする方法がわかりません。あなたは(0)X番目の項目ごとに時間をSubItem.Itemに戻ってきているので、ListViewコールバックのサブアイテムの取得に問題がありますか?

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

コードがしかのListViewItemのメインテキストを取得している。以下は、私が使用しているコードがあります。 SubItem.Item(0)はItemのTextフィールドです。最初のサブアイテムを取得したい場合は、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 
+0

おかげで...脳が従事していないときに時々、指のコード! – JFV

関連する問題