ParentControls module

The ParentControls object is the collection of other controls that live in the same container as a UserControl — its siblings on the host form, frame, or page. It is reachable inside a UserControl through UserControl.ParentControls and lets the control discover and interact with the other controls around it without being given explicit references.

By default each item is returned wrapped in its host Extender — the container’s per-control adapter that adds layout properties (Top, Left, Tag, Visible, Name, and so on) on top of the control’s own interface. Set ParentControlsType to vbNoExtender to receive the bare controls instead. The collection itself is read-only: items cannot be added or removed through it.

' Inside a UserControl: print the name and type of every sibling control.
Dim ctl As Object
For Each ctl In UserControl.ParentControls
    Debug.Print ctl.Name, TypeName(ctl)
Next ctl

Members

Count

Returns the number of controls in the collection.

Syntax: object.Count

object
required An object expression that evaluates to a ParentControls object.

The value is a Long. Valid indexes for Item run from 1 to Count.

Item

Returns a single control from the collection by its one-based position.

Syntax: object.Item( index )

object
required An object expression that evaluates to a ParentControls object.
index
required A Long giving the one-based position of the control to return. Must be between 1 and Count; otherwise an error occurs.

Item is the default member of ParentControls, so the following lines are equivalent:

Set ctl = UserControl.ParentControls.Item(1)
Set ctl = UserControl.ParentControls(1)

The result is typed as Object because the container may hold any kind of control. Whether the returned reference exposes the host-supplied Extender properties is governed by ParentControlsType.

ParentControlsType

Returns or sets whether each item is returned wrapped in its host Extender or as the bare control.

Syntax: object.ParentControlsType [ = value ]

object
required An object expression that evaluates to a ParentControls object.
value
A ParentControlsType value:
vbExtender (1)
Items are returned wrapped in the host’s Extender, exposing the container-supplied layout properties (Top, Left, Visible, Name, Tag, and so on) in addition to the control’s own interface. This is the default.
vbNoExtender (0)
Items are returned as the bare control, without the Extender wrapper. Use this when the Extender’s extra properties are not needed, or when the control’s own interface defines members that would otherwise be shadowed.

Changing ParentControlsType affects subsequent reads from Item and For Each iteration; references already obtained are not retroactively re-wrapped.

For Each iteration

A ParentControls object can be iterated with the For Each…Next statement, which yields each sibling control in turn, in the order the host returns them. The hidden _NewEnum member supplies the enumerator and is not called directly from user code.

Dim ctl As Object
For Each ctl In UserControl.ParentControls
    Debug.Print ctl.Name
Next ctl