从VB.net中的ListBox中删除项目

时间:2013-01-17 12:45:27

标签: vb.net

我有两个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

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

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

OR listbox2.items.clear()也无效..

如何清除ListBox2中的所有项目?

9 个答案:

答案 0 :(得分:8)

简单地使用:

ListBox2.Items.Clear()
  • 要考虑您的上一次修改:之前添加新项目

MSDN:ListBox.ObjectCollection.Clear

  

从集合中删除所有项目。

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

  

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

如果你想使用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);

<击>

答案 1 :(得分:4)

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

ListBox2.Items.Clear()

答案 2 :(得分:4)

此代码对我有用:

ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)

答案 3 :(得分:3)

有一种删除所选项目的简单方法,所有这些人都想采用一种简单的方法:

lstYOURVARIABLE.Items.Remove(lstYOURVARIABLE.SelectedItem)

我在Visual Studio上以Visual Basic模式使用它。

答案 4 :(得分:1)

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

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

答案 5 :(得分: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

答案 6 :(得分:0)

我已经测试过,它运行正常

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

答案 7 :(得分:0)

这对我有用。

Private Sub listbox_MouseDoubleClick(sender As Object, e As MouseEventArgs) 
        Handles listbox.MouseDoubleClick
        listbox.Items.RemoveAt(listbox.SelectedIndex.ToString())
    End Sub

答案 8 :(得分:-1)

   Dim ca As Integer = ListBox1.Items.Count().ToString
    While Not ca = 0
        ca = ca - 1
        ListBox1.Items.RemoveAt(ca)
    End While