Vb.net 列表框取消选择项目

Vb.net 列表框取消选择项目,vb.net,Vb.net,要根据条件取消选择项目。我注意到当do setselected时,我在enxt循环中得到错误,因为索引在第一个循环后被更改,所以我决定刷新并再次进行每次循环,但在取消选择一个项目后,我对第二个项目进行了初始循环。如何正确地做到这一点?Listbox绑定到数据源 sss: For i As Integer = 0 To ListBox1.SelectedItems.Count - 1 Dim variationswert1 As DataRowView =

要根据条件取消选择项目。我注意到当do setselected时,我在enxt循环中得到错误,因为索引在第一个循环后被更改,所以我决定刷新并再次进行每次循环,但在取消选择一个项目后,我对第二个项目进行了初始循环。如何正确地做到这一点?Listbox绑定到数据源

sss:
        For i As Integer = 0 To ListBox1.SelectedItems.Count - 1
            Dim variationswert1 As DataRowView = ListBox1.SelectedItems(i)
            Dim name As String = ListBox1.GetItemText(variationswert1)
if name = "TR8" Then 
            ListBox1.SetSelected(i, False)
            ListBox1.Refresh()
            GoTo sss
End If
        Next
编辑:(供进一步讨论):

 For i = 0 To ListBox1.Items.Count - 1
                If ListBox1.SelectedItems.Contains(ListBox1.Items(i))  Then

      MsgBox(ListBox1.GetItemText(ListBox1.Items(i)))
                MsgBox(ListBox1.SelectedValue.ToString)    

                    ListBox1.SetSelected(i, False)
                End If
            Next
            ListBox1.Refresh()

循环所有这些项目,而不仅仅是选择的项目,是否可行

sss:
For i As Integer = 0 To ListBox1.Items.Count - 1

    If ListBox1.SelectedItems.Contains(ListBox1.Items(i)) Then 
        Continue For
    End If

    Dim variationswert1 As DataRowView = ListBox1.Items(i)
    Dim name As String = ListBox1.GetItemText(variationswert1)
    if name = "TR8" Then 
        ListBox1.SetSelected(i, False)
        ListBox1.Refresh()
        GoTo sss
    End If
Next
编辑:

 For i = 0 To ListBox1.Items.Count - 1
                If ListBox1.SelectedItems.Contains(ListBox1.Items(i))  Then

      MsgBox(ListBox1.GetItemText(ListBox1.Items(i)))
                MsgBox(ListBox1.SelectedValue.ToString)    

                    ListBox1.SetSelected(i, False)
                End If
            Next
            ListBox1.Refresh()
分别使用,其余保持不变:

For Each item In ListBox1.Items

    If Not ListBox1.SelectedItems.Contains(item) Then
        Continue For
    End If

    Dim variationswert1 As DataRowView = item
    Dim name As String = ListBox1.GetItemText(variationswert1)
    If name = "TR8" Then

        ListBox1.SetSelected(ListBox1.Items.IndexOf(item), False)
        ListBox1.Refresh()
        GoTo sss
    End If
Next
简单地说,我可能还不明白,但似乎您希望取消选择所有列表框项目,使其文本为“TR8”

编辑2:

 For i = 0 To ListBox1.Items.Count - 1
                If ListBox1.SelectedItems.Contains(ListBox1.Items(i))  Then

      MsgBox(ListBox1.GetItemText(ListBox1.Items(i)))
                MsgBox(ListBox1.SelectedValue.ToString)    

                    ListBox1.SetSelected(i, False)
                End If
            Next
            ListBox1.Refresh()
因此,对于每个和

For i As Integer = 0 To ListBox1.Items.Count - 1
If ListBox1.SelectedItems.Contains(ListBox.Items(i)) And ListBox1.GetItemText(ListBox.Items(i)) = "TR8" Then
    ListBox1.SetSelected(i, False)
    ListBox1.Refresh()

End If

接下来

您的问题是,您正在迭代选定的项目,但由于您要更改该数组,因此您将运行的任何循环最终都将失败:

  • 每个的
    将失败,因为您将修改集合
  • 对于i=0到…
    将失败,因为您将删除一个项,然后在
    超出范围异常中结束(或类似情况)
其想法是:

  • 浏览您的所有项目:
    • 如果选择了项目,且项目文本为“TR8”,则取消选择此项目
下面是代码:

Dim FoundItem As Object 'Or Whatever class the items are

For i = 0 to ListBox1.Items.Count - 1
    If ListBox1.SelectedItems.Contains(ListBox1.Items(i)) AndAlso _ 
       ListBox1.GetItemText(ListBox1.Item(i)) = "TR8"  Then
        FoundItem = ListBox1.Items(i)
        ListBox1.SetSelected(i, False)
        MsgBox(FoundItem.ToString())
    End If
Next
ListBox1.Refresh()

什么不起作用?我想我已经更正了,我使用selectedItems来表示
变量swet1
。对每个人都使用a不是很简单吗?或者除了获取索引之外,您还需要
i
吗?您的解决方案提供了一个invinitive循环。我不需要这个id,你可以为每个人提供解决方案(我也为每个可以使用的方法粘贴)编辑我的答案。而且
GoTo-sss
似乎只是让它变长了,每次我取消选择一个,它都会重新开始。这就是你想要的吗?对于我得到的第二个代码:System.Windows.Forms.dll中发生了类型为“System.InvalidOperationException”的未经处理的异常,因为列表被修改了。相对于上一个,我希望它能工作。我只是看到第一个,第一个如果需要否定的话。。。我的缺点是,早上太早首先,不要使用
标签
转到
…这太好了,不管你还有什么。如果我想在取消选中之前读取所选记录的值,该怎么办?请查看编辑部分中我的主要帖子。我使用了此查询并进行了修改,但失败了。如何更正?@JimmyJimm关于您的编辑,这是因为
i
变量用于运行
集合,而不是
SelectedItems
。查看我的更新帖子。你能再次检查我的主要帖子(编辑)吗?这似乎起作用了,你认为如何?不,不幸的是,某些循环出现了错误,其中所选项目之间存在间隙,该值保持不变…不知怎的,我注意到它失去了值