Understanding Collections
A collection is just what its name implies: a collection of objects. Collections make it easy to work with large numbers of similar objects by enabling you to create code that performs iterative processing on items within the collection. Iterative processing is an operation that uses a loop to perform actions on multiple objects, rather than writing the operative code for each object. In addition to containing an indexed set of objects, collections also have properties and might have methods. Figure 3.8 illustrates the structure of a collection.
Figure 3.8. Collections contain sets of like objects, and they have their own properties and methods.
Continuing with the Dog/Pet object metaphor, think about what an Animals collection might look like. The Animals collection could contain one or more Pet objects, or it could be empty (containing no objects). All collections have a Count property that returns the total number of objects contained within the collection. Collections might also have methods, such as a Delete method used to remove objects from the collection or an Add method used to add a new object to the collection.
To better understand collections, you're going to create a small Visual Basic project that cycles through the Controls collection of a form, telling you the value of the Name property of every control on the form.
To create your sample project, follow these steps:
-
Start Visual Basic now (if it's not already loaded) and create a new Windows Application project titled Collections Example.
-
Change the name of the form to fclsCollectionsExample using the Solution Explorer and set the form's Text property to Collections Example.
-
Right-click the project name Collections Example in the Solution Explorer and choose Properties from its context menu.
-
Open the Startup object dropdown list and choose fclsCollectionsExample. Click OK to save your changes and close the Property Pages dialog box.
-
Add a new button to the form by double-clicking the Button tool in the toolbox. Set the button's properties as follows:
-
Next, add some text box and label controls to the form. As you add the controls to the form, be sure to give each control a unique name. Feel free to use any name you like, but you can't use spaces in a control name. You might want to drag the controls to different locations on the form so that they don't overlap.
-
When you are finished adding controls to your form, double-click the Show Control Names button to add code to its Click event. Enter the following code:
Property |
Value |
Name |
btnShowNames |
Text |
Show Control Names |
Location |
88, 112 |
Size |
120, 23 |
Dim intIndex As Integer For intindex = 0 To Me.Controls.Count - 1 MsgBox("Control #" & intindex & " has of the name " & _ Me.Controls(intindex).Name) Next intindex
NOTE
Every form has a Controls collection, which might or might not contain any controls. Even if no controls are on the form, the form still has a Controls collection.
The first statement should look familiar to you by now. As with the Object Example you created earlier, this statement creates a variable to hold a value. Rather than create a variable that can hold an object, as you did in the earlier example, this statement creates a variable that can hold only a number.
The next statement (the one that begins with For) accomplishes a few tasks. First, it initializes the variable intIndex to 0, and then it starts a loop (loops are discussed in Hour 15, "Looping for Efficiency"), incrementing intIndex by one until intIndex equals the number of controls on the form, less one. The reason you subtract one from the Count property is that when referencing items in a collection, the first item is always item zerocollections are zero-based. Thus, the first item is in location zero, the second item is in location one, and so forth. If you tried to reference an item of a collection in the location of the value of the Count property, an error would occur because you would be referencing an index that is one higher than the actual locations within the collection.
The MsgBox function (discussed in detail in Hour 18, "Interacting with Users") is a built-in function of Visual Basic that is used to display a simple dialog box with text. The text that you are providing, which the MsgBox function will display, is a concatenation of multiple strings of text. (Concatenation is the process of adding strings together; it is discussed in Hour 13, "Performing Arithmetic, String Manipulation, and Date/Time Adjustments.")
Run the project by pressing F5 or by clicking Start on the toolbar. Ignore the additional controls that you placed on the form and click the Show Control Names button. Your program will then display a message box similar to the one shown in Figure 3.9 for each control on your form (because of the loop). When the program is finished displaying the names of the controls, choose Stop Debugging from the Debug toolbar to stop the program, and then save the project.
Figure 3.9. The Controls collection allows you to get to each and every control on a form.
Because everything in Visual Basic .NET is an object, you can expect to use numerous collections as you create your programs. Collections are powerful, and the quicker you become comfortable using them, the more productive you'll become.