多选列表框

时间:2011-03-30 15:10:24

标签: vb.net winforms listbox multi-select

我在表单上有一个列表框,它可以正常工作。

我想编辑表单上的项目,这意味着填充列表框,然后选择相关项目。

我的列表框包含项目大小列表,我想选择属于正在编辑的项目的大小。

可以有人给我一些指示。

我尝试me.lstItemSizes.SetSelected(i,true),但这仅适用于单个项目。

非常感谢任何帮助。

我的代码:

    Private Sub SelectItemSizes(ByVal itemID As Integer)

    Dim itemSizes As IList(Of ItemSize) = _sizeLogic.GetItemSizes(itemID)

    Me.lstItemSizes.SelectionMode = SelectionMode.MultiExtended

    If (itemSizes.Count > 0) Then

        For i As Integer = 0 To Me.lstItemSizes.Items.Count - 1

            For x As Integer = 0 To itemSizes.Count - 1

                If (CType(Me.lstItemSizes.Items(i), PosSize).SizeID = itemSizes(x).SizeID) Then
                    Me.lstItemSizes.SetSelected(i, True)
                Else
                    Me.lstItemSizes.SetSelected(i, False)
                End If

            Next

        Next

    End If

End Sub

4 个答案:

答案 0 :(得分:7)

您是否将selectionmode设置为multi?

您需要指定以允许多个选择。

然后你可以这样做:

Dim i as Integer=0

For i=0 To Me.listBox.SelectedItems.Count -1
  'display the listbox value
next i

这是一个截图:

enter image description here

在列表框中设置属性后,根据您想要选择的值调用setselected。

me.lstItemSizes.SetSelected(3,true)
me.lstItemSizes.SetSelected(4,true)
me.lstItemSizes.SetSelected(9,true)

在这里你可以添加20个数字,只选择偶数。

    Dim i As Integer

            'load the list with 20 numbers
            For i = 0 To 20
                Me.ListBox1.Items.Add(i)
            Next

            'now use setselected
            'assume only even are selected
            For i = 0 To 20
                If i Mod 2 = 0 Then
                    Me.ListBox1.SetSelected(i, True)
                End If
            Next

第3次编辑

看看你循环的方式,让我们假设我创建了一个整数列表,我的vb.net生锈我主要用C#开发。但假设你这样做了:

     Dim l As New List(Of Integer)

            l.Add(2)
            l.Add(6)
            l.Add(20)

您的列表中只有三个项目,因此首先根据列表中的项目循环,然后在列表框中的项目中,您反之亦然。看看这个:

 Dim i As Integer
        Dim l As New List(Of Integer)

        l.Add(2)
        l.Add(6)
        l.Add(20)

        'load the list with 20 numbers
        For i = 0 To 20
            Me.ListBox1.Items.Add(i)
        Next

        Dim lCount As Integer = 0

        For lCount = 0 To l.Count - 1
            For i = 0 To 20
                If i = l.Item(lCount) Then
                    Me.ListBox1.SetSelected(i, True)
                    Exit For
                End If
            Next
        Next

在代码中,我的列表只包含3个项目:2个,6个和20个。 我将这些项添加到l,它只是一个列表对象。 所以现在我必须循环使用这3个数字并与我的列表框进行比较。你可以在列表框上循环,然后考虑列表对象。

请注意,在我的for循环中,一旦找到列表中的项目,我就不再需要循环,所以我exit for。这确保我不会过期所需的循环量。找到项目后退出并返回列表对象计数。

在这里运行我的代码之后是结果

enter image description here

答案 1 :(得分:2)

您必须更改 ListBox.SelectionMode property才能启用多项选择。
可能的值由SelectionMode enum给出,如下所示:

  

:无法选择任何项目   一个:只能选择一个项目    MultiSimple :可以选择多个项目    MultiExtended :可以选择多个项目,用户可以使用 Shift Ctrl 和箭头键进行选择


因此,您只需将以下行添加到您已有的代码中:

' Change the selection mode (you could also use MultiExtended here)
lstItemSizes.SelectionMode = SelectionMode.MultiSimple;

' Select any items of your choice
lstItemSizes.SetSelected(1, True)
lstItemSizes.SetSelected(3, True)
lstItemSizes.SetSelected(8, True)

或者,您可以在设计时设置SelectionMode属性,而不是使用代码。

答案 2 :(得分:0)

根据MSDN,SetSelected()可用于选择多个项目。只需对需要选择的每个项目重复调用即可。这是他们使用的例子:

' Select three items from the ListBox.
listBox1.SetSelected(1, True)
listBox1.SetSelected(3, True)
listBox1.SetSelected(5, True)

供参考,this is the MSDN article

答案 3 :(得分:0)

因为我的代码有以下循环:

For i As Integer = 0 To Me.lstItemSizes.Items.Count - 1

        For x As Integer = 0 To itemSizes.Count - 1

            If (CType(Me.lstItemSizes.Items(i), PosSize).SizeID = itemSizes(x).SizeID) Then
                Me.lstItemSizes.SetSelected(i, True)
            Else
                Me.lstItemSizes.SetSelected(i, False)
            End If

        Next

    Next

第一个循环遍历可用的大小,第二个循环用于比较项目大小。

拥有以下代码:

Else
 Me.lstItemSizes.SetSelected(i, False)
End If

即使项目i被选中,也可以取消选择。

解: 移除Me.lstItemSizes.SetSelected(i, False)或包含Exit For