This article originally
appeared in the Visual Basic newsletter. Automatically subscribe to our free Visual Basic newsletter.
In most Visual Basic 6 projects, the number of controls on a
form are set at design time and don’t change when the program runs. But what if
you have a situation where the number of controls needed isn’t known until
runtime? For example, the program could read data from a database and need to
display one control for each record that was found. This tip shows you how to
add controls to a form at runtime. This technique is also applicable to
essentially any Visual Basic control.
Add controls
To add controls at runtime, there must already be at least
one instance of the control on the form, and it must be part of a control
array. To create a control array containing only a single control, add the
control to the form and then set its Index
property to 0. This control doesn’t have to be visible.
When the program runs, you add additional controls with the
Load statement: Load ControlName(Index).
ControlName
is the Name property of the control
array you created and Index is the Index property of the new control. You
should start at 1 because Index 0 is
already taken by the control you placed on the form at design time.
Each control that you add in this way initially has the same
properties as the original control. You’ll have to change at least the Top and
Left properties to prevent all the added controls from displaying at the same
position onscreen.
Related resources
Use dynamic menus to efficiently enhance your .NET applications
Download: Quick Start guide to Visual Basic .NET
An example
The variable rs
refers to a recordset that contains
information about rooms in a dormitory. The code goes through the recordset and for each room, creates a Label control (lblRoom), and then a ListBox control (lstRoom). It then positions them in a grid on the form.
ROOM_LIST_HEIGHT and ROOM_LIST_WIDTH are constants that specify the control
size and are defined elsewhere.
col = 0
row = 0
Do While Not rs.EOF
recordnumber = rs.AbsolutePosition
Load lblRoom(recordnumber)
lblRoom(recordnumber).Caption = “Room ” & rs.Fields(“RoomNumber”).Value
lblRoom(recordnumber).Top = row * (ROOM_LIST_HEIGHT * 1.3) + 300
lblRoom(recordnumber).Left = col * (ROOM_LIST_WIDTH * 1.2) + 500
lblRoom(recordnumber).Visible = True
Load lstRoom(recordnumber)
lstRoom(recordnumber).Left = lblRoom(recordnumber).Left
lstRoom(recordnumber).Top = lblRoom(recordnumber).Top + _
lblRoom(recordnumber).Height + 10
lstRoom(recordnumber).Visible = True
rs.MoveNext
col = col + 1
If col = 3 Then
col = 0
row = row + 1
End If
Loop
Adding controls to a form at runtime can give your program
the flexibility that’s necessary to react to changing data and circumstances.
Peter Aitken has been programming with Visual Basic since Version
1.0. He has written numerous books and magazine articles on Visual Basic and
other computer and programming topics.