【问题标题】:How to remove selected items from a listbox如何从列表框中删除选定的项目
【发布时间】:2017-06-18 17:37:00
【问题描述】:

这是针对 VS2015 社区中的一个 VB.NET 4.5 项目。

我正在尝试从列表框中删除某些选定的项目,但前提是选定的项目满足条件。我找到了很多关于如何删除选定项目的示例。但是对于嵌套在循环中遍历所选项目的条件,没有任何效果(至少,我无法让示例与我正在尝试做的事情一起工作......)

这是我的代码:

    Dim somecondition As Boolean = True
    Dim folder As String
    For i As Integer = 0 To lstBoxFoldersBackingUp.SelectedItems.Count - 1

        If somecondition = True Then
            folder = lstBoxFoldersBackingUp.SelectedItems.Item(i)
            Console.WriteLine("folder: " & folder)
            lstBoxFoldersBackingUp.SelectedItems.Remove(lstBoxFoldersBackingUp.SelectedItems.Item(i))
        End If
    Next

控制台输出正确显示了当前迭代项目的文本,但我无法让 Remove() 工作。就像现在的代码一样,我得到了控制台输出,但列表框没有改变。

【问题讨论】:

    标签: vb.net listbox selecteditem visual-studio-2015


    【解决方案1】:

    删除项目会更改项目的索引位置。有很多方法可以解决这个问题,但是从您的代码中,尝试向后迭代以避免该问题。您还应该从 Items 集合中移除该项目,而不是 SelectedItems 集合:

    For i As Integer = lstBoxFoldersBackingUp.SelectedItems.Count - 1 To 0 Step -1
      If somecondition = True Then
        folder = lstBoxFoldersBackingUp.SelectedItems.Item(i)
        Console.WriteLine("folder: " & folder)              
        lstBoxFoldersBackingUp.Items.Remove(lstBoxFoldersBackingUp.SelectedItems(i))
      End If
    Next
    

    【讨论】:

    • 为什么不赞成它似乎是一个有效的问题 - 有代码?
    • @codeMonger123 我没有投反对票——我试图提供帮助。 :-)
    • 这行得通,但是如何?选择列表框中的第二个项目后,当我到达 Remove() 行时,i 的值为 0,因为它是 selecteditems 集合中的唯一项目。所以我们将值 0 传递给 Remove() 方法,我认为这将是列表框的 Items 集合中的第一项......
    • @marky Items 和 SelectedItems 是两个不同的集合。 SelectedItems(i) 指的是 Items(i) 集合中的特定项目。代码使用的是 Remove,而不是 RemoveAt,这需要适当的索引。
    • @codeMonger123 那么您的评论属于问题,而不是答案。
    【解决方案2】:

    您可以简单地使用它来从列表框中删除选定的项目 ListBox1.Items.Remove(ListBox1.SelectedItem)

    我希望这会有所帮助。

    【讨论】:

    • 嗨罗伯特。很好的答案,但只是一点格式化提示:如果您使用单引号(在波浪号上方,大多数 ANSI 键盘上的 1 旁边),它将格式化为代码 sn-p。像这样:ListBox1.Items
    【解决方案3】:

    这不起作用:

    ListBox1.Items.Remove(ListBox1.SelectedItem) 
    

    您需要准确定义要删除的项目,所以下一个对我来说很好:

    ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
    

    但是每次调用它都会删除一行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 2012-02-19
      相关资源
      最近更新 更多