3

我有两个ListBox1ListBox2。我通过选择项目将项目插入到ListBox2具有以下代码的项目中ListBox1

da6 = New SqlDataAdapter("select distinct(component_type) from component where   component_name='" & ListBox1.SelectedItem() & "'", con)
da6.Fill(ds6, "component")
For Each row As DataRow In ds6.Tables(0).Rows
    ListBox2.Items.Add(row.Field(Of String)("component_type"))
Next

但是当我重新选择另一个项目时,ListBox1ListBox2显示预加载项目和现在一起加载的项目。我只希望现在加载的项目显示在列表框中。我使用了这段代码,但问题没有解决:

For i =0 To ListBox2.items.count - 1
    ListBox2.Items.removeAt(i)
Next

或者 listbox2.items.clear()也不行..

如何清除 中的所有项目ListBox2

4

9 回答 9

7

简单地使用:

ListBox2.Items.Clear()
  • 考虑您的最后一次编辑:在添加新项目之前执行此操作

MSDN:ListBox.ObjectCollection.Clear

从集合中删除所有项目。

请注意,您的方法的问题是RemoveAt更改了所有剩余项目的索引。

从列表中删除项目时,列表中后续项目的索引会更改。有关已删除项目的所有信息都将被删除。您可以使用此方法通过指定要从列表中删除的项目的索引来从列表中删除特定项目。要指定要删除的项目而不是项目的索引,请使用 Remove 方法。要从列表中删除所有项目,请使用 Clear 方法

如果您仍然想使用RemoveAt,您可以倒退,例如:

一个for循环:

For i As Int32 = ListBox2.Items.Count To 0 Step -1
    ListBox2.Items.RemoveAt(i)
Next

或一个while

While ListBox2.Items.Count > 0
    ListBox2.Items.RemoveAt(ListBox2.Items.Count - 1)
End While

旧的 C# 代码

for (int i = ListBox2.Items.Count - 1; i >= 0; i--)
    ListBox2.Items.RemoveAt(i);

while(ListBox2.Items.Count > 0)
    ListBox2.Items.RemoveAt(ListBox2.Items.Count - 1);

于 2013-01-17T12:48:08.067 回答
5

这段代码对我有用:

ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)

于 2015-02-03T20:09:12.817 回答
4

如果只想清除列表框,则应使用 Clear ( winforms | wpf | asp.net ) 方法:

ListBox2.Items.Clear()
于 2013-01-17T12:48:14.387 回答
4

有一种简单的方法可以删除选定的项目,而所有这些人都在寻求一种硬方法:

lstYOURVARIABLE.Items.Remove(lstYOURVARIABLE.SelectedItem)

我在 Visual Studio 的 Visual Basic 模式下使用了它。

于 2014-02-06T10:43:18.240 回答
2

这是我想出的从列表框中删除用户选择的项目的代码它似乎在多选列表框中工作正常(selectionmode 属性设置为多扩展)。:

Private Sub cmdRemoveList_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdRemoveList.Click
    Dim knt As Integer = lstwhatever.SelectedIndices.Count
    Dim i As Integer
    For i = 0 To knt - 1
        lstwhatever.Items.RemoveAt(lstwhatever.SelectedIndex)
    Next
End Sub
于 2014-01-05T02:04:17.290 回答
2

我已经测试过了,效果很好

For i =0 To ListBox2.items.count - 1
ListBox2.Items.removeAt(0)
Next
于 2015-10-08T22:51:28.523 回答
1

我认为您的 ListBox 已经用 ListBox2.Items.Clear() 清除了。问题是您还需要使用 ds6.Tables.Clear() 从以前的结果中清除数据集。

在你的代码中添加这个:

da6 = New SqlDataAdapter("select distinct(component_type) from component where   component_name='" & ListBox1.SelectedItem() & "'", con)
    ListBox1.Items.Clear()    ' clears ListBox1
    ListBox2.Items.Clear()    ' clears ListBox2
    ds6.Tables.Clear()        ' clears DataSet  <======= DON'T FORGET TO DO THIS
da6.Fill(ds6, "component")
For Each row As DataRow In ds6.Tables(0).Rows
    ListBox2.Items.Add(row.Field(Of String)("component_type"))
Next
于 2016-01-27T15:20:40.100 回答
0

这对我有用。

Private Sub listbox_MouseDoubleClick(sender As Object, e As MouseEventArgs) 
        Handles listbox.MouseDoubleClick
        listbox.Items.RemoveAt(listbox.SelectedIndex.ToString())
    End Sub
于 2017-07-19T18:13:57.103 回答
-1
   Dim ca As Integer = ListBox1.Items.Count().ToString
    While Not ca = 0
        ca = ca - 1
        ListBox1.Items.RemoveAt(ca)
    End While
于 2015-12-15T15:44:01.610 回答