【问题标题】:Programmatically select items in listbox with value's from list以编程方式从列表中选择具有值的列表框中的项目
【发布时间】:2014-12-24 11:22:47
【问题描述】:

原始问题:我为列表框制作了搜索功能。如果我搜索一个值;列表框清除所有项目,并执行 items.add 函数(其中包含来自文本框的给定值)。 我想在 listbox4 中“保存”选定的值(listbox5 也是选定的项目)。我尝试使用 setselected 函数,但该函数不允许字符串。是否有保存所选项目的解决方法?

更新:

谢谢,我实现了你的 sn-p。

以下是我的代码(正在进行中)。它在 listbox4 中添加相同值的多个值。除了选定的值(仅添加了一个)之外,它添加了相同的未选择值。除了这个问题,代码可以工作。

有人有想法吗?

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) 处理 TextBox1.TextChanged

    Dim selected As Object()
    selected = (From selitem In ListBox5.SelectedItems Select selitem).ToArray()

    ListBox4.Items.Clear()

    For Each item In ListBox3.Items
        If item.contains(TextBox1.Text) Then
            ListBox4.Items.Add(item)
        End If
    Next

    For Each item In ListBox5.Items
        If item.contains(TextBox1.Text) Then
            ListBox4.Items.AddRange(selected)
            Array.ForEach(selected, Sub(selitem As Object) ListBox4.SelectedItems.Add(selitem))
        End If
    Next
End Sub

Private Sub ListBox4_Click(sender As Object, e As System.EventArgs) Handles ListBox4.Click

    Dim additems As String
    For Each additems In ListBox4.SelectedItems
        ListBox5.Items.Add(additems)
    Next

    ''REMOVE DUPLICATES
    Dim List As New ArrayList
    For Each item1 As String In ListBox5.Items
        If Not List.Contains(item1) Then
            List.Add(item1)
        End If
    Next
    ListBox5.Items.Clear()
    For Each item2 As String In List
        ListBox5.Items.Add(item2)
    Next

    Dim i As Integer
    For i = 0 To Me.ListBox5.Items.Count - 1
        Me.ListBox5.SetSelected(i, True)
    Next
End Sub

【问题讨论】:

  • “保存”是什么意思?您可以轻松地将所有选定的项目添加到List<T>之前调用Clear
  • 我确实将所有选定的项目添加到列表框5。但是在调用 Clear 之后,列表框将再次填充特征,并且必须在列表框 4 中选择已经选择的特征(列表框 5)。我以为我可以为此目的使用 setselected 。但它不起作用。
  • 我不确定我是否在关注你。您是在问“如何以编程方式选择列表框中的项目”
  • 这是一种称呼方式。是的;)
  • 我已经在使用计数功能时尝试了 setselected。这工作得很好。但它不使用保存在其他列表框中的功能。

标签: vb.net listbox selected items


【解决方案1】:

我不确定您的所有列表框如何相互交互,因此这是一个“概念示例”,说明如何从一个列表框添加和选择(选定)项目到另一个列表框。

假设您有两个列表框:sourcetarget。首先将source列表框中的所有选定项存储到一个数组中。

Dim selected As Object() = (From item In Me.sourceListBox.SelectedItems Select item).ToArray()

现在,我们可以安全地使用source 列表框中的项目进行任何操作。

Me.sourceListBox.Items.Clear()

接下来,我们将所有项目添加到target 列表框。

Me.targetListBox.Items.AddRange(selected)

最后,我们将所有项目添加到 SelectedItems 集合中。

Array.ForEach(selected, Sub(item As Object) Me.targetListBox.SelectedItems.Add(item))

【讨论】:

  • 谢谢!有一个解决方法,这行得通!仍在进行中
【解决方案2】:

此代码有效!感谢您的帮助。

Private Sub ListBox4_Click(sender As Object, e As System.EventArgs) Handles ListBox4.Click

    Dim selecteditems As String
    For Each selecteditems In ListBox4.SelectedItems
        ListBox5.Items.Add(selecteditems)
    Next

    ''REMOVE DUPLICATES
    Dim List As New ArrayList
    For Each item1 As String In ListBox5.Items
        If Not List.Contains(item1) Then
            List.Add(item1)
        End If
    Next
    ListBox5.Items.Clear()
    For Each item2 As String In List
        ListBox5.Items.Add(item2)
    Next

    ''SELECT ALL ITEMS
    Dim i As Integer
    For i = 0 To Me.ListBox5.Items.Count - 1
        ListBox5.SetSelected(i, True)
    Next

    selected = (From selitem In ListBox5.SelectedItems Select selitem).ToArray()
    Array.ForEach(selected, Sub(selitem As Object) ListBox4.SelectedItems.Add(selitem))
End Sub

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged

    ListBox4.Items.Clear()

    'TOEVOEGEN, alleen toevoegen als deze er nog niet in zit!
    For Each item In ListBox3.Items
        If item.contains(TextBox1.Text) Then
            ListBox4.Items.Add(item)
        End If
    Next
    selected = (From selitem In ListBox5.SelectedItems Select selitem).ToArray()
    Array.ForEach(selected, Sub(selitem As Object) ListBox4.SelectedItems.Add(selitem))
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多