First, note that the Microsoft.VisualBasic.Compatibility namespace has been added to the references in Solution Explorer.
Now check the code in Form1.Designer.vb. To set up the control array, VB.NET adds these statements to the Form Designer generated code (line continuations added here):
Public WithEvents _LabelControlArray_0 _
As System.Windows.Forms.Label
Public WithEvents LabelControlArray _
As Microsoft.VisualBasic.Compatibility.VB6.LabelArray
In the InitializeComponent() sub, these statements are found:
Me._LabelControlArray_0 = _
New System.Windows.Forms.Label
Me.LabelControlArray = _
New Microsoft.VisualBasic.Compatibility.VB6.LabelArray(Me.components)
CType(Me.LabelControlArray, _
System.ComponentModel.ISupportInitialize).BeginInit()
.....
The properties of first element of the array are initialized. The initialization that makes a real difference is this one:
Me.LabelControlArray.SetIndex(Me._LabelControlArray_0, CType(0, Short))
Finally, this statement is executed:
CType(Me.LabelControlArray, System.ComponentModel.ISupportInitialize).EndInit()
ISupportInitialize is used when a component has properties that depend on each other. So you can see the BeginInit and EndInit methods at the top and bottom of the initialization.
Keep in mind that VBE (and VS 2005) are pretty sensitive to changes. If you change anything here and reopen the form designer, the VS and VBE interface may make changes that will generate errors which prevent the form designer from even being opened. Clif Gay has some advice about this later on.
The bottom line is that VB.NET can support control arrays, in spite of what the documentation says. The easiest way to make it happen is simply to create the code in VB 6 and then convert it. But since a lot of you don't even have VB 6 anymore (and Microsoft is making it impossible to buy), you need to know how to use these tools. That's where Clif Gay's advice comes in handy.

