vb.net 将子项添加到列表视图

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15418443/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-17 12:48:08  来源:igfitidea点击:

add subitems to a listview

vb.netlistviewbackgroundworker

提问by Remus Rigo

I'm using a backgroundworker to populate a listview, but i want to add subitems also. Can anyone help me out?

我正在使用后台工作人员来填充列表视图,但我也想添加子项。谁能帮我吗?

    Public Class Form1

    Private Sub bgw_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgw.DoWork
        Dim li As New List(Of ListViewItem)

        For Each fn As String In My.Computer.FileSystem.GetFiles("s:\Videos", FileIO.SearchOption.SearchAllSubDirectories, "*.*")
            li.Add(New ListViewItem(My.Computer.FileSystem.GetName(fn))) 
            'here i want to add a subitem containing the filesize
            'My.Computer.FileSystem.GetFileInfo(fn).Length
        Next

        e.Result = li.ToArray
    End Sub

    Private Sub bgw_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgw.RunWorkerCompleted
        lv.Items.AddRange(DirectCast(e.Result, ListViewItem()))
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        bgw.RunWorkerAsync()
    End Sub
End Class

回答by John Bustos

Try this in your For Eachloop:

在你的For Each循环中试试这个:

Dim NewItem as New ListViewItem(My.Computer.FileSystem.GetName(fn))
NewItem.SubItems.Add(My.Computer.FileSystem.GetFileInfo(fn).Length)

li.Add(NewItem) 

Hopefully that should do the trick

希望这应该可以解决问题

回答by Remus Rigo

this is working too, but is it correct?

这也有效,但正确吗?

Public Class Form1

    Dim item1 As String = ""
    Dim item2 As String = ""

    Private Sub bgw_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgw.DoWork
        Dim progress As Integer = 0
        'calculate progress later
        progress = 1

        For Each fn As String In My.Computer.FileSystem.GetFiles("s:\Videos", FileIO.SearchOption.SearchAllSubDirectories, "*.*")
            item1 = My.Computer.FileSystem.GetName(fn)
            item2 = My.Computer.FileSystem.GetFileInfo(fn).Length

            bgw.ReportProgress(progress)
        Next
    End Sub

    Private Sub bgw_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles bgw.ProgressChanged
        Dim li As New ListViewItem
        li = lv.Items.Add(item1, 0)
        li.SubItems.Add(item2)
    End Sub

    Private Sub bgw_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgw.RunWorkerCompleted
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        lv.Items.Clear()
        bgw.RunWorkerAsync()
    End Sub

End Class