An agregate type is a structure or class or union that holds (possibly) an agregate of serveral members of other types.
In you print function you do not have an agregate type you have a pointer to an aggreagate type. You can get the agregate type by dereferencing the pointer so for a structure type T
T* pointer = &obj; // Always initialise pointers
obj.member; // Access a member of an agregate type
pointer.member; // Error pointer is not an agregate type it is a pointer to an agregate type
(*pointer).member; // OK pointer is derefernced to the agregate type
pointer->member; // The -> operator is a shortcut for above syntax
For Each ctrl As Control In Me.Controls("pnlMainPanel").Controls
If ctrl.GetType Is GetType(System.Windows.Forms.Panel) Then
For Each subCtrl As Control In ctrl.Controls
If subCtrl.GetType Is GetType(System.Windows.Forms.TextBox) Then
If subCtrl.GetType Is ...