Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create Control Arrays in VB .NET

Tags:

vb.net

vb6

In VB6 there is a feature called Control Arrays, where you name controls the same name and provide them an index value. This allows you to set a value by looping through the controls and setting each value. In VB .NET I can't create a control array could someone provide me with a similar solution.

like image 899
vijay Avatar asked Mar 14 '11 13:03

vijay


People also ask

How will you create a control array in VB?

You set up a control array by naming one or more controls of the same type the same name and set the Index property of each control in the array to a non-negative value (i.e., the controls in the control array are usually indexed from 0 to one less than the number of controls in the array).

What is control array create/control array in VB?

In Visual Basic, a control array is a group of related controls in a Visual Basic form that share the same event handlers. Control arrays are always single-dimensional arrays, and controls can be added or deleted from control arrays at runtime.

Does VB net support control arrays?

VB.NET doesn't have control arrays as such. However, you can create an array of controls and assign your controls to each element of the array, though you could also use a List(Of Control) . This will allow you to loop over the collection.

How do we create arrays in VB net?

To declare an array in VB.Net, you use the Dim statement. You can also initialize the array elements while declaring the array. The elements in an array can be stored and accessed by using the index of the array. Dynamic arrays are arrays that can be dimensioned and re-dimensioned as the program requires.


2 Answers

Here is a sample I wrote for something else that shows how to do something similar and shows how to do the handler as well. This makes a 10x10 grid of buttons that turn red when you click them.

Dim IsCreated(99) As Boolean
Dim Buttons As New Dictionary(Of String, Button)

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    For i As Integer = 0 To 99
        Dim B As New Button
        Me.Controls.Add(B)
        B.Height = 30
        B.Width = 40
        B.Left = (i Mod 10) * 41
        B.Top = (i \ 10) * 31
        B.Text = Chr((i \ 10) + Asc("A")) & i Mod 10 + 1
        Buttons.Add(B.Text, B)
        B.Tag = i
        AddHandler B.Click, AddressOf Button_Click
    Next


End Sub

Private Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim B As Button = sender
    IsCreated(B.Tag) = True
    B.BackColor = Color.Red
End Sub
like image 58
dwidel Avatar answered Oct 23 '22 09:10

dwidel


So this is one of the features that did not make the transition to VB.NET -- exactly :-( However, you can accomplish much of what you would have done in VB6 with two different mechanisms in .NET: Looping through the controls collection and handling control events.

Looping Through the Controls Collection
In VB.NET every form and control container has a controls collection. This is a collection that you can loop through and then do an operation on the control like set the value.

Dim myTxt As TextBox
For Each ctl As Control In Me.Controls
  If TypeOf ctl Is TextBox Then
    myTxt = CType(ctl, TextBox)
    myTxt.Text = "something"
  End If
Next

In this code sample you iterate over the controls collection testing the type of the returned object. If you find a textbox, cast it to a textbox and then do something with it.

Handling Control Events
You can also handle events over multiple controls with one event handler like you would have using the control array in VB6. To do this you will use the Handles keyword.

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged, TextBox2.TextChanged, TextBox3.TextChanged
  Dim myTxt As TextBox = CType(sender, TextBox)
  MessageBox.Show(myTxt.Text)
End Sub

The key here is the Handles keyword on the end of the event handler. You separate out the various controls that you want to handle and the event by using a comma. Make sure that you are handling controls that have the same event declaration. If you ever wondered what sender was for on every event well here's one of the uses for it. Cast the sender argument to the type of control that you are working with and assign it to a local variable. You will then be able to access and manipulate the control that fired the event just like you would have in VB6 if you specified and index to the array.

Using these two techniques you can replicate the functionality of control arrays in VB6. Good luck.

like image 39
Steve Massing Avatar answered Oct 23 '22 11:10

Steve Massing