将子项添加到列表视图
问题描述:
我正在使用backgroundworker来填充列表视图,但我也想添加子项目。谁能帮我吗?将子项添加到列表视图
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
答
在For Each
循环试试这个:
Dim NewItem as New ListViewItem(My.Computer.FileSystem.GetName(fn))
NewItem.SubItems.Add(My.Computer.FileSystem.GetFileInfo(fn).Length)
li.Add(NewItem)
希望这应该做的伎俩
答
这是工作压力太大,但它是正确的吗?
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
+0
...我没有看到你在哪里更新你的listview与新项目...你要做的是在你的'bgw_DoWork'中创建一个'ListViewItem'列表,然后每一次一会儿会将该列表传递给您的'bgw_ProgressChanged',并将其添加到您的列表视图中。在'for'循环的每一次迭代中传递listview条目是没有意义的,因为那样你并没有真正从backgroundworker中获得任何好处...... – 2013-03-14 20:17:31
工作得很好,但我怎样才能使用bgw_ProgressChanged添加数据? – 2013-03-14 19:45:37
看看这个链接 - 在示例部分...它应该指向你在正确的方向:http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx – 2013-03-14 19:55:36
我看了在它并重新写我的代码,但这样可以吗? – 2013-03-14 20:10:16