Ya lo han dicho pero es mejor recalcarlo. No es lo mismo Components[] que Controls[] y por tanto sus *Count.
Léase:
Indicates the number of components owned by the component.
property ComponentCount: Integer;
Description
Use ComponentCount to find or verify the number of components owned by a component, or when iterating through the Components list to perform some action on all owned components. ComponentCount is used internally for such iterative procedures.
Note: The ComponentCount of a component contains the same number of items as in the Components list for that component, and is always 1 more than the highest Components index, because the first Components index is always 0.
Aquí sobre la propiedad vectorial Components[]
Lists all components owned by the component.
Description
Use Components to access any of the components owned by this component, such as the components owned by a form. The Components property is most useful when referring to owned components by number rather than name. It is also used internally for iterative processing of all owned components.
Note: For convenience use Components with ComponentCount for iterative processing. However, be aware that while the ComponentCount of a component contains the same number of items as in the Components list for that component, ComponentCount is always 1 more than the highest Components index, because the first Components index is always 0.
Mientras que, por el lado de ControlCount:
Returns the number of child controls.
property ControlCount: Integer;
Description
Read ControlCount when iterating over all the children of this control. The children of the control are listed in the Controls property array.
ControlCount is a read-only property.
Note: The value of ControlCount is always 1 greater than the highest Controls index, because the first Controls index is 0.
Y sobre su propiedad vectorial, Controls[]:
Lists all child controls.
Description
Controls is an array of all the child controls. These are all controls that list this control as their Parent property. The Controls property is convenient for referring to the children of a control by number rather than name. For example, Controls may be used to iterate over all the child controls.
Don't confuse the Controls property with the Components property. The Controls property lists all the controls that are child windows of the control, while the Components property lists all components that it owns. The form owns all components put on it, and therefore, they appear in the form's Components property list, even when they are child windows of a control on the form.
Controls is a read-only property. To add or delete a child control, use the InsertControl or RemoveControl methods. To move a child control from one parent to another, set the Parent of the child control, as that will handle both the RemoveControl from the original parent and the InsertControl to the new parent.
Saludos,