2011-03-30 134 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