Visual Basic 6.0 allows you to dynamically add control to a form at run-
time using the new Add method of the Controls collection. This article
shows how to dynamically add intrinsic and ActiveX controls.
The following example dynamically adds two intrinsic and one ActiveX
control to an application at run-time. The sample shows how to program the
events of a dynamically added control. If you are dynamically adding a
control that is not referenced in the project, you may need to add the
control's License key to the Licenses collection. For more information on
the Licenses collection, please see the REFERENCES
section of this article.
When you reference properties of the dynamically-added control, you must
use the Object keyword to access the properties of the control. If you
do not use the Object keyword, you will only be able to access the extender
properties of the control.
Attempting to access the extender properties without using the Object keyword causes the following 438 error:
"Object doesn't support this property or method."
When an ActiveX control is dynamically added using the VBControlExtender
object and WithEvents in the declare statement, you will need to use the
ObjectEvent method to code all of the control's events. If you declare an
intrinsic control WithEvents, you will get all the standard event methods
for the type of control you declared. You can see this by adding the
following declare statement in the Code window and then checking the Events
dropdown for the declared variable in the Code window:
Dim WithEvents cmdMyCommand as VB.CommandButton
Steps to Create Sample Project
- Create a new Standard EXE project. Form1 is created by default.
- Add the following code to the code window of Form1:
' If you are adding an ActiveX control at run-time that is
' not referenced in your project, you need to declare it
' as VBControlExtender.
Dim WithEvents ctlDynamic As VBControlExtender
Dim WithEvents ctlText As VB.TextBox
Dim WithEvents ctlCommand As VB.CommandButton
Private Sub ctlCommand_Click()
ctlText.Text = "You Clicked the Command button"
Private Sub ctlDynamic_ObjectEvent(Info As EventInfo)
' test for the click event of the TreeView
If Info.Name = "Click" Then
ctlText.Text = "You clicked " & ctlDynamic.object.selecteditem.Text
Private Sub Form_Load()
Dim i As Integer
' Add the license for the treeview to the license collection.
' If the license is already in the collection you will get
' the run-time error number 732.
' Dynamically add a TreeView control to the form.
' If you want the control to be added to a different
' container such as a Frame or PictureBox, you use the third
' parameter of the Controls.Add to specify the container.
Set ctlDynamic = Controls.Add("MSComctlLib.TreeCtrl", _
' set the location and size of the control.
ctlDynamic.Move 1, 1, 2500, 3500
' Add some nodes to the control.
For i = 1 To 10
ctlDynamic.object.nodes.Add Key:="Test" & Str(i), Text:="Test" _
ctlDynamic.object.nodes.Add Relative:="Test" & Str(i), _
Relationship:=4, Text:="TestChild" & Str(i)
' Make the control visible.
ctlDynamic.Visible = True
' add a textbox
Set ctlText = Controls.Add("VB.TextBox", "ctlText1", Form1)
' Set the location and size of the textbox
ctlText.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
1, 2500, 100
' Change the backcolor.
ctlText.BackColor = vbYellow
' Make it visible
ctlText.Visible = True
' Add a CommandButton.
Set ctlCommand = Controls.Add("VB.CommandButton", _
' Set the location and size of the CommandButton.
ctlCommand.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
ctlText.Height + 50, 1500, 500
' Set the caption
ctlCommand.Caption = "Click Me"
' Make it visible
ctlCommand.Visible = True
- Save and run the project. Try clicking the CommandButton and on
different Nodes in the TreeView. The TextBox will show what you click.
For additional information, please see the following article in the
Microsoft Knowledge Base:
How To What is the Licenses Collection Used For?
Also search On-line Help for the following topics:
- Add Method (Controls Collection)
- Add Method (Licenses Collection)
Article ID: 190670 - Last Review: July 1, 2004 - Revision: 2.1
- Microsoft Visual Basic 6.0 Learning Edition
- Microsoft Visual Basic 6.0 Professional Edition
- Microsoft Visual Basic 6.0 Enterprise Edition
|kbhowto kbctrlcreate kbfaq KB190670|