En gambas no hay propiamente arrays de controles. En gambas hay controles diversos que pueden tener un mismo manejador de eventos.

Pongamos que yo tengo varios textbox en los que quiero tener un código común. La solución es poner en todos ellos al mismo manejador de eventos y luego programar código para ese manejador.

Si tengo tres textbox y escribiera código para ellos el código podría ser este
textbox1_change()
...
end

textbox2_change()
...
end

textbox3_change()
...
end


Es decir, cada control tiene su propio evento change. Si deseo cambiar esto lo que haré es cambiar a todos la propiedad group para que todos utilicen el mismo manejador
Textbox1.group="comun"
Textbox2.group="comun"
Textbox3.group="comun"

Y ahora programar el manejador común
Comun_change()
...
end


¿Como distinguir los distintos controles dentro de un manejador de eventos común?
La forma de hacerlo es utilizar la propiedad TAG que es de tipo variant y cuyo valor nos dirá cual de los controles físicos estamos utilizando.

Es decir, haríamos lo siguiente:
Textbox1.group="comun"
Textbox1.tag=1
Textbox2.group="comun"
Textbox1.tag=2
Textbox3.group="comun"
Textbox1.tag=3

Y así para saber que control físico es el que estamos usando en cada momento bastará con mirar el contenido de la propiedad TAG al igual que en VB usábamos la propiedad index.

LAST
Dado que en gambas objetos de naturaleza distinta y/o con nombres distintos pueden tener un mismo manejador de eventos se hace necesaria la funcionalidad de Last que retorna el nombre del último objeto que ha recibido un evento.
Comun_change()
select case Last.tag
case 1 ...
case 2 ...
case 3 ...
end select
end


Para crearlas dinámicamente
Dim T1 as textbox, T2 as textbox

T1=new textbox as "grupo"
T2=new textbox as "grupo"

sub grupo_keypress()
...
end