Building Windows Applications

Coding Without Control Arrays

One of the more noticeable changes for a Visual Basic 6.0 developer who is getting started in Windows forms is the lack of control arrays. This feature of pre-.NET VB allowed you to configure a set of controls with a single name by assigning index values to each control. Once a control array was created, a single event procedure could be used to handle the events of all the controls in the array and you could also loop through the controls in an array based on index. These features made control arrays useful for a great many projects, but I mostly remember using this feature to handle groups of option buttons (radio buttons in .NET). Consider this form in VB6 (see Figure 3.4), which displays a six-item option button (radio button) collection using a control array. A single event handler (see Listing 3.12) can be written for this array that will run whenever any of the options are selected, or the array can be looped through to find the one option button with a Value = True .

Listing 3.12 VB6 Event Handler for an Option Button Control Array

Private Sub optFruit_Click(Index As Integer)
  MsgBox "Selected Item: " & optFruit(Index).Caption
End Sub

A group of options buttons on a VB6 form can all be part of a control array.

Figure 3.4
A group of options buttons on a VB6 form can all be part of a control array.

Due to the changes in event handling, allowing multiple objects' events to be mapped to the same event handler, achieving the same effect in Windows forms is not impossible, but it is not quite as simple as it was in VB6. Combining the event handling features of .NET with the use of a standard array, here is a walkthrough of handling some radio buttons on a .NET Windows form. This example creates an array to hold a set of radio buttons and shows you how you can use that array along with a shared event handler to determine which option button is currently selected. If you follow along with these steps, you can try out the code for yourself.

  1. Create a new Visual Basic .NET Windows application.
  2. A blank Form1 will be created and opened in Design View. Select the form and then drag a new radio button onto it from the toolbox.
  3. Copy and paste the radio button four times onto the form. This is likely the fastest way to end up with five radio buttons, but you can also drag four more radio buttons from the toolbox.
  4. Add a label to your form.
  5. Double-click one of the radio buttons to jump into its CheckedChanged event (see Listing 3.13) and modify the Handles clause to include all five of the radio buttons' events.

    Listing 3.13
    Creating an Event Handler for All Five Radio Buttons

    Private Sub RadioButton1_CheckedChanged( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles RadioButton1.CheckedChanged, _
            RadioButton2.CheckedChanged, _
            RadioButton3.CheckedChanged, _
            RadioButton4.CheckedChanged, _
            RadioButton5.CheckedChanged
    End Sub

  6. Declare an array of radio buttons as a private member variable in your form (put the declaration anywhere in your code outside of a procedure): Dim radioButtons(4) As RadioButton
  7. Declare an integer private member variable as well: Dim selectedOption As Integer = 0
  8. Add code into the constructor of the form (the sub New() procedure contained within the Windows Forms Designer generated area) to fill up the array with the radio buttons (see Listing 3.14).

    Listing 3.14 Filling Up Your Own Radio Button Array

    Public Sub New()
      MyBase.New()
      'This call is required by the Windows Form Designer.
      InitializeComponent()
      'Add any initialization after the InitializeComponent() call
      radioButtons(0) = RadioButton1
      radioButtons(1) = RadioButton2
      radioButtons(2) = RadioButton3
      radioButtons(3) = RadioButton4
      radioButtons(4) = RadioButton5
    End Sub

  9. Finally, write code into the shared CheckedChanged event handler that will loop through the radio button array and determine the currently selected option (shown in Listing 3.15). Store the appropriate array index into selectedOption and change the Text property of the label control.

    Listing 3.15
    Loop Through the Radio Buttons and Determine which One Is Clicked

    Private Sub RadioButton1_CheckedChanged( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles RadioButton1.CheckedChanged, _
            RadioButton2.CheckedChanged, _
            RadioButton3.CheckedChanged, _
            RadioButton4.CheckedChanged, _
            RadioButton5.CheckedChanged
      Dim i As Integer = 0
      Dim found As Boolean = False
      While i < radioButtons.GetLength(0) And Not found
        If radioButtons(i).Checked Then
          found = True
          selectedOption = i + 1
          Label1.Text = CStr(selectedOption)
        End If
        i += 1
      End While
    End Sub

If you were to run this code, you would see the label changing every time a different option was selected. The flexibility of event handling in .NET allows you to work with a set of five radio buttons without having to have five different event handlers.

You might also like...

Comments

Contribute

Why not write for us? Or you could submit an event or a user group in your area. Alternatively just tell us what you think!

Our tools

We've got automatic conversion tools to convert C# to VB.NET, VB.NET to C#. Also you can compress javascript and compress css and generate sql connection strings.

“We better hurry up and start coding, there are going to be a lot of bugs to fix.”