Sí. Como menciona Elektro debes hacer eso con cada uno de los textbox (si pones atención al código verás que eso está resuelto porque la asignación está dentro del bucle for()). Recuerda que una variable del tipo de cualquier objeto (a diferencia de los tipos primitivos como int, bool, etc) es un puntero que guarda la dirección de memoria donde existen las propiedades del objeto. Cuando tú creas una variable de la forma:
TextBox VarObjeto;
La variable 'VarObjeto' no apunta a ninguna dirección de memoria. Y cuando haces:
VarObjeto
= new TextBox
();
Lo que haces es crear un nuevo objeto de la clase 'TextBox' y asignar a 'VarObjeto' la dirección de memoria donde reside el objeto.
Y eso de que no te muestre nada es porque al crear una nueva instancia para cada objeto del arreglo dejan de hacer referencia a los textbox que tienes creados en el formulario. Ahora,
esto es lo interesante: Si previamente hacían referencia a los textbox que tienes en el formulario, ¿por qué te saltaba la excepción como si fueran objetos nulos? Espero que Elektro o alguien más nos pueda dar explicación a esto. :/