首页 > 解决方案 > 获取列表视图子项的文本

问题描述

我正在尝试在 vb.net 中获取 ListView 子项的文本。根据这个答案,下面的代码应该可以工作。

Function gen() As String
    Dim Log = New Logging.Log("gen")
    Dim Code As String = getTemplateCode()
    For Each i As ListViewItem In ListView1.Items
        Log.WriteEntry("Item: " + i.Text)
        If i.SubItems.Count > 0 Then
            Log.WriteEntry("Item: " + i.SubItems(0).Text)
            Code = Code.Replace(i.Text, i.SubItems(0).Text)
        End If
    Next
    Return Code
End Function

但是,ListViewItem.SubItem.Text我没有得到字符串,而是得到了似乎是的ListViewItem.Text,并且无法弄清楚为什么。

这是上述代码的实际日志输出:

gen Information: 0 : Item: $Parshah$
gen Information: 0 : Item: $Parshah$
gen Information: 0 : Item: $Year$
gen Information: 0 : Item: $Year$
gen Information: 0 : Item: $EnglishId$
gen Information: 0 : Item: $EnglishId$
gen Information: 0 : Item: $books$
gen Information: 0 : Item: $books$
gen Information: 0 : Item: $title$
gen Information: 0 : Item: $title$

和列表视图的屏幕截图

Listview_Screenshot_Sample

日志输出应该是

gen Information: 0 : Item: $Parshah$
gen Information: 0 : Item: nothing
gen Information: 0 : Item: $Year$
gen Information: 0 : Item: nothing
gen Information: 0 : Item: $EnglishId$
gen Information: 0 : Item: nothing
gen Information: 0 : Item: $books$
gen Information: 0 : Item: nothing
gen Information: 0 : Item: $title$
gen Information: 0 : Item: nothing

我究竟做错了什么?

标签: vb.netlistview

解决方案


好的。愚蠢的错误。一项研究告诉我,ListViewItem 在其第一个子项中包含自身,并且第一个动态添加的子项以 1 而不是 0 的索引开始。(哎呀。)想想批处理参数,其中 %~0 是文件本身......哈哈。

所以,我们改变这样的代码:

    Function gen() As String
        Dim Log = New Logging.Log("gen")
        Dim Code As String = getTemplateCode()
        For Each i As ListViewItem In ListView1.Items
            Log.WriteEntry("Item: " + i.Text)
            If i.SubItems.Count > 0 Then
                Log.WriteEntry("Item: " + i.SubItems(1).Text) 'changed 0 to 1
                Code = Code.Replace(i.Text, i.SubItems(1).Text) 'changed 0 to 1
            End If
        Next
        Return Code
    End Function

推荐阅读