To create a multiple-column, multiple-selection list box, you need to set both the Columns and the MultiSelect properties of a list box. In the following example, these properties are used to create such a list box.
You'll notice that when you run the application, the list box contains two columns, as shown in Figure 7.37.
Figure 7.37 Multiple-column list box
If you draw the list box large enough to hold all the items in one column, the second column will be empty; the other items will wrap, and horizontal scroll bars will appear automatically only if the list box is not long enough. Try resizing the top list box and adding additional list items to see how Visual Basic automatically handles multiple columns.
The example uses the Selected property — a Boolean array containing the selection status of a list box — to determine which items are selected. Each entry in the array corresponds to a list item and is set to True if the item is selected, or False if it is not selected. After the user selects items from the list, each array entry is checked to see if it is set (True). If so, the entry is added to the second list, a normal single-column list box, using the AddItem method.
Set the properties for the example as indicated in the following table.
Object | Property | Setting |
Form | Caption | Multiple-Column List Box |
Top list box | Name Columns MultiSelect |
lstTop 2 2-Extended |
Bottom list box | Name | lstBottom |
First command button | Name Caption |
cmdTransfer &Transfer |
Second command button | Name Caption |
cmdClear &Clear |
Third command button | Name Caption |
cmdClose &Close |
The MultiSelect property allows you to select a range of values in a list box. If you click the first list item, and then press SHIFT and click the last item in the range (or use the SHIFT+ DOWN ARROW keys), all the items in the range are selected.
Add code to the Form_Load procedure to initialize the top list, 1stTop:
Private Sub Form_Load ()
lstTop.AddItem "Paris"
lstTop.AddItem "New Orleans"
lstTop.AddItem "San Francisco"
lstTop.AddItem "Chicago"
lstTop.AddItem "Seattle"
lstTop.AddItem "Toronto"
lstTop.AddItem "New York"
lstTop.AddItem "Tbilisi"
lstTop.AddItem "Moscow"
lstTop.AddItem "Portland"
' Select a couple of items.
1stTop.Selected(0) = True
1stTop.Selected(1) = True
End Sub
Note You can add items to list boxes without repeatedly using the AddItem method by typing items in the List property of the Properties window. After entering each item, press CTRL+ENTER to go to the next line. This allows you to type multiple entries in a multiple-column list box.
Add the following code to the 1stTop_DblClick event procedure:
Private Sub 1stTop_DblClick ()
cmdTransfer.Value = True ' Press transfer button.
End Sub
Add the following code to the Click event procedure for the Transfer command button:
Private Sub cmdTransfer_Click ()
For n = 0 To (lstTop.ListCount - 1)
' If selected, add to list.
If lstTop.Selected(n) = True Then
lstBottom.AddItem lstTop.List(n)
End If
Next
cmdClear.Enabled = True
End Sub
Notice how the array index values start from 0 and go to ListCount -1
.
Add the following code to the Click event procedure for the Clear command button:
Private Sub cmdClear_Click ()
lstBottom.Clear
cmdClear.Enabled = False
End Sub
Add the following code to the Click event procedure for the Close command button.
Private Sub cmdClose_Click ()
Unload Me
End Sub