我最近在从列表框中选择ALL个项目(一次ONLY!)并将它们添加到列表视图中时遇到了一些问题。由于列表视图将包含big内容,并且执行该任务时avoid GUI冻结,因此我正在使用backgroundworker来处理此任务。
好,所以这是BackgroundWorker_ProgressChanged代码:
For Each item In ListBox3.SelectedItems
listView1.Items.Add(ListBox3.SelectedItem, ImageList1.Images.Count - 1).SubItems.Add("Test")
ListView1.Items("Test").SubItems.Add("")
Next
For Each item As ListViewItem In ListView1.SelectedItems
Next
End Sub
上面编写的代码在列表视图中显示项目,但是ONLY如果用户从Listbox3中选择某个项目并显示无限次从列表框中选择的项目,我希望它显示ONCE ONCE all列表视图中列表框中的项目。我想自动选择ALL项目,而无需用户干预,我尝试了几种失败的方法。有人可以为这个问题提供解决方案吗?谢谢。
我刚刚进行了测试,看来从辅助线程上从ListBox
获取项目不是问题,所以我对此表示错误。虽然肯定会添加/设置项目,所以您需要将这些项目添加到UI线程上的ListView
。这是一些对我有用的示例代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End Sub
Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim outputItems As New List(Of ListViewItem)
For Each inputItem As String In ListBox1.Items
outputItems.Add(New ListViewItem(inputItem))
Next
e.Result = outputItems
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
Dim items = DirectCast(e.Result, List(Of ListViewItem))
ListView1.Items.AddRange(items.ToArray())
End Sub