The CheckBox(i) syntax is classic VB6. VB6 allowed you easily create control arrays directly in the form designer. VB.NET does not share that same feature. You could manually create your own array of check box controls in the code, but when using the designer, every control must be assigned its own unique name. If you named them all sequentially, such as CheckBox1, CheckBox2, etc., then you could access them in a loop by name via the Form.Controls collection:
For i As Integer = 0 to 15
Dim c As CheckBox = CType(Me.Controls("CheckBox" & i.ToString), CheckBox)
c.Enabled = b
Next
forloop is fine. You just need an array of checkboxes that you can iterate through.