2011-03-30 89 views
3

我在窗体上有一个列表框,它对我想要做的工作很好。多选列表框

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

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

PLease可以有人给我一些指针。

我试过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 
+0

它的这段代码这就是造成问题的原因: '否则 Me.lstItemSizes.SetSelected(I,假)' – 2011-03-30 15:33:48

+0

@ Richard-没有它的你的方式循环,你应该首先根据你的物品大小的数量循环,然后根据你的物品在你的列表框中的数量进行循环。在我的示例中查看我的第3次编辑 – JonH 2011-03-30 15:37:39

+0

感谢您的帮助Jon – 2011-03-30 15:39:28

回答

7

你将SelectionMode为多?

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

然后,你可以这样做:

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 

第三届编辑

看看你是循环的方式,让我们假设我创建了一个整数列表,我的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 

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

请注意,在我的for循环中,一旦我的列表中的项目被找到,我不再需要循环,所以我exit for。这确保我不过期所需的循环量。一旦找到物品,就返回列表物品数量的计数。

跑这里我的代码后的结果

enter image description here

+0

我想显示所有可能的尺寸,但只选择与该项目相关的尺寸。 例如。该列表可能包含5个尺寸,但其中只有3个与我正在加载的项目有关。 – 2011-03-30 15:19:00

+0

@Richard,你可以做到这一点,但首先在列表框的属性中,你必须确保'SelectionMode'被设置为multisimple例如。 – JonH 2011-03-30 15:20:22

+0

@Richard,看看我编辑中的例子。 – JonH 2011-03-30 15:20:52

1

你必须改变ListBox.SelectionMode property为了使多选。
可能的值由SelectionMode enum给出如下:

:没有可以选择项
一个:只有一个项目可以选择
MultiSimple:多个项目被选中
多扩展:可以选择多个项目,用户可以使用ShiftCtrl键,和箭头键来进行选择


所以,你只需要添加下面一行到你已经拥有的代码:

' 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属性在设计时,而不是用代码来完成。

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

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 

意味着,即使项目我就成了选择的,它也被取消。

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

+0

@ Richard-就这样,你知道你可能不需要为此创建一个答案,只需在评论中说明你只需要退出即可。我很高兴你解决了你的问题! – JonH 2011-03-30 15:50:14